2012年1月29日日曜日

PHPでCSVファイルを処理する(その1)

という訳で。
ヒトカラから帰ってきました。
受付のすぐそばの部屋に案内されて、ちょっと歌いづらかったです。
それはおいておいて。

このエントリの目的
本エントリでは、PHPでCSVを読み込んで処理するコトを想定しています。
POSTやGETでデータを取得することは想定していません。

このエントリの目次
本エントリではCSVの仕様と、付随する文字コードの問題を調べるまでです。
PHPでの処理までは書けていません(それは次のエントリで書く予定)。

・1.CSVとは
・2.CSVの仕様で個人的に重要と思った箇所
・3.CSVの文字コードはShift-JISが多い
・4.Shift-JISの問題 = 5C問題
・5.長くなったのでここで一旦切ります

1.CSVとは
Comma Separated Valuesの略。
その名の通り、それぞれの値が「,」で区切られたデータのことです。

実は「標準」の規格はなく、RFCで「広報」として仕様をまとめているようです。
RFCの原文は以下。RFC4180です。
Common Format and MIME Type for Comma-Separated Values (CSV) Files

(ちなみに、RFCのドキュメント区分は色々あるようで、rfc-index.txt の見方 | よっち@ほ~むさんにまとまっています。)

2.CSVの仕様で個人的に重要と思った箇所
以下のようなサイトを見てみました。
CSVファイルの一般的書式 (RFC4180 日本語訳) | アルプス登山の玄関口・笠井家
CSVファイルフォーマットの解説 | CodeZine
Comma Separated Values (CSV) Standard File Format | Edoceo, inc

個人的に重要と思った箇所をまとめてみました(誤解や齟齬があるといけないので、自分で調べてみるコトをおすすめします。また、間違った記述がある場合はご指摘頂けると助かります。)。

・改行コードはCRLFとする (← えぇー…って感じ)。
・半角スペースは値の一部として扱われる
・値自体に「"」(ダブルクォーテーション)や「,」(カンマ)や改行(CRLF)を含ませる場合は、値を「"」で囲まなくてはならない。そして値自体に「"」を含ませたい場合は「""」と二つ重ねてエスケープする
・ファイル末尾のレコード終端には、改行があってもなくてもよい。

3.CSVの文字コードはShift-JISが多い
文字コードは全部UTF-8でいいでしょ!と言いたいところですが、CSVはExcelで読み込みや出力できるなど密接な関係があります。
Excelのデフォルトの文字コードはShift-JISです。

で、ExcelでCSVを読み込むとき、文字コードがShift-JIS以外だと日本語が文字化けしてしまうそうです。
つまり、CSVはShift-JISで扱われるコトが多いっぽいです。

4.Shift-JISの問題 = 5C問題
さて、このShift-JISで問題になってくるのが5C問題です(初めて知りましたが…)。

5C問題とは…
Shift_JISでは、「ソ」「噂」など一部の字の2バイト目に、5C16を使用している。
多くのプログラミング環境ではこの5C16エスケープ文字としている
なのでShift-JISを想定していない環境では問題が起こる
とのコトです。
うあああ。

5.長くなったのでここで一旦切ります
次のエントリで、5C問題の解決方法を検証し、本題であるCSVのパースをします。

調べながらエントリを書いてるんですが、こんなに長くなる話題だとは思わなんだ…。
それでは。

0 件のコメント:

コメントを投稿


Related Posts Plugin for WordPress, Blogger...