文字コードの話。まず、ざっくり、CP932はShift_JISを拡張したもの。
なので、大半は同じ。まずはこれが今回の話のベース、というか、問題というか。
文字コードには沢山の種類があり、変換するにはnkfが便利。入力された文字コードを自動判別してくれるので。とは言え、残念ながら完璧ではない(完璧にはできない、というべきか)。
テスト用の入力ファイル。

UTF-8の環境のLinux上で作成したもの。これをCP932に変換し、nkfで文字コード判定してみる。

CP932ではなく、Shift_JISと判定されてしまう。
そのため、これをUTF-8に変換して、Windows上のTeraPadで開くと2行目の「~」が文字化けしてしまう。


入力文字コードを明示すれば、もちろん、上手くいく。


いわゆる「波ダッシュ問題」。
試しに、一番最初の文字をCP932にしかない文字にしてみる(ここでは丸数字)。

これだとCP932と判定してくれる。ならば大丈夫かと思いきや…


残念ながら、化けてしまった。やはり、入力文字コードを明示しなきゃダメなようだ。


まぁ、仮にこれが上手く行ったとしても、最初の文字がCP932固有のものであるなんてのは極めてレアケースであり、期待するのは無理。
さて、困った。nkfでは入力コードの自動判定が行えて便利ではあるが、CP932の可能性があるなら事前に判定する必要がありそう。また、Shift_JISと判定されても、CP932と見なした方が無難かもしれない。今、純粋な (?)Shift_JISの環境ってあるのかな?
コメント