作者: Bruce.
日時: 2007/1/12(23:35)
Bruce.です。

ねこ丸 さんは書きました (2007/01/12 9:47):
>   言語やライブラリ設計の話ではなく、動くコードを書くユーザーの側からす
> ると、文字コードの判別は
> 
> 1. 何がくるか分からない状態はできるだけ作らない
> 2. ヒントを埋め込めるならそれを利用する
> 3. 両方ダメなら諦めてできるだけ取得した文字列全体を使って判別する
> 
>   って感じになるんでしょうかね。

まあそうでしょうね。
他に情報がない状態でビットパターンだけ眺めたら正しい判定は
難しくなりますから。

統計的な情報と手法を使えばまあある程度は推測ができるような
気もしますが、たとえばeuc-kr と euc-jp を見分けろといわれたら
ちょっと困るかもしれないw。

>   ところで私は実は us-ascii 以外の文字リテラルの表記については利用した
> ことがない(いつも生書き(^^;)ので確認させてほしいのですが、これがある
> と、例えばファイルは euc-jp で書いているけれども実際にそこに書かれてい
> る文字は utf-8 で解釈される…ということが可能になるんですよね?

んと "\xe0\xa1\xa1 ..." とかということですか?
まあutf-8はlead-byte と trail-byteで固有のパターンを持ちますので
実際はeuc-jpだけどutf-8に判定されるというパターンは、判定に
使う材料である文字列が十分に長ければ(それほど大きい数字じゃないと
思います)、誤判定はそれほど心配することはないんじゃないでしょうか。
もちろん可能性はゼロではないわけですが、現実的に注意しなければ
ならないほど似たパターンになるのはまずないだろうと。

>   いや何が気になっているかと言うと、みなさんは内部エンコーディングの変
> 更を大量のファイルに対して行わなきゃいけなくなった場合はどうするのかな
> と思ったもので。まぁ、ぶっちゃけ目の前に euc-jp で書かれた大量の PHP の
> ファイルがあるわけですが、これ、将来的に utf-8 にしますって話になったら
> どうすんのかなーと。まぁいつもは想像しただけで怖くなって無視してるんで
> すが、何か方法あるんなら嬉しいなと思った次第です。

んーここでいう「内部エンコーディング」とは具体的には何を意味している
のでしょうか?
スクリプト中に記述するときのエンコーディング?

そういうレガシーなコードは必要に迫られていないのであれば
変換しないでほうっておくのがいいんじゃないかと。
新しく作る分はutf-8にするにしても、レガシーコードを一気に
書き換え。というのはちょっとぞっとしない作業です。
変換そのものは機械的にできるにしても、検証の手間を考える
とねえ。

-- 
木村浩一
  I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
  mail kbk@...
        web  www.kt.rim.or.jp/~kbk/zakkicho/
             homepage3.nifty.com/farstar/