[PHP-users 17538]Re: SJIS-EUC変換時の文字化け

Tomoyuki Asakawa tom @ asakawa.ne.jp
2003年 8月 27日 (水) 15:00:50 JST


あさかわ

> 原因は、分かりませんが、\ が悪さをしているようですが、PHP は Shift_JIS
> に対応したものを使ってますよね?
>

実は、PHP-DEVで、ちょうど話題にしてました。

\がくると、fgetcsvは、エスケープとして処理してしまうのです。
なので、SJISの場合、2バイト目が、¥(5c)になる様な文字がくると
そこで、ずれるので、文字化けになるのです。

しかし、私は、csvには、その仕様の歴史的経緯から、¥でエスケープするという
概念は、ないはずだという、立場です。

もともと、csvは
MS-BASICのINPUT文に、そのまま突っ込めるデータなんですよ。
1980年初頭に、VISICALCが使用したのが最初だったと思います。
¥でエスケープされたら、\1000って書きたいとき、¥¥1000てかかないと
ならなくなりますよね。

ようするにcsvは、BASICの文法で困らない、データ形式なわけで
同じく、BASICで困らない様に、日本語をつかう様に定義されたのが
SJIS(MS-漢字:CP/M漢字)です。
この場合、BASICに¥でエスケープするなんて概念がなかったので
2バイト目に¥がくるのです。逆に、"などが絶対にこない様になっています。




PHP-users メーリングリストの案内