という訳で。
ヒトカラから帰ってきました。受付のすぐそばの部屋に案内されて、ちょっと歌いづらかったです。
それはおいておいて。
このエントリの目的
本エントリでは、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のパースをします。調べながらエントリを書いてるんですが、こんなに長くなる話題だとは思わなんだ…。
それでは。