先日、Shift_JISのダメ文字の話を紹介した。
結局はShift_JISを使うからダメなんだよということでUTF-8に変換することに。
昔、Pythonで変換用スクリプト書いたよなと思ったらこれだわ。
CP437という古い文字コードをUTF-8に変換して読めるようにしたと。
こういうことができるツールはなかなかなかった。
Shift_JISからUTF-8への変換はできるツールもいろいろあるけどさ。
encoding=’shift_jis’ で開いて、encoding=’utf-8′ で保存すると。
これでOKだろうと流すと、can’t decode byte とエラーが出る。
バイト数で言われてもわかんねぇよと思いつつ、バイナリエディタで開いて確認すると、
「No.」 の合字のところでひっかかってた。
あ、厳密にShift_JISの範囲外だとハネられるのね。
Windowsで使われているShift_JISというのはJIS X 0208に含まれない字が入っている。
かつて機種依存文字なんて言われたのはこのあたりの文字である。
Windowsで使われている拡張されたShift_JISのことはCP932と呼ばれることがある。
CP932にもいろいろ歴史があるらしいのだが、今はこの理解でよいらしい。
Pythonでは encoding=’cp932′ を指定すれば読み書きできる。
というわけで encoding=’cp932′ で開いて、encoding=’utf-8′ で保存するというのが答えだった。
なんでそんな字をコメントに使ってんだよとは思うけど、
そこを今さら問うても仕方ないし……UTF-8にしてしまえば何も問題なくなるし。
Windowsで作ったShift_JISのファイルの移行としては、CP932指定の方が安全なようであるというオチかなと。
移行したソースコードを使っていろいろ実験していたけど、
移植する上でめんどくさい要素はいろいろありそうですね。
今までノーマークだったペリフェラルに依存する機能があったり、
ポインタ型の使い方が複雑怪奇だったり……
どちらもなんともならない話ではないのだが、丁寧に整理しないと間違うところなので、
ただでさアーキテクチャの違いでいろいろ修正が必要なのに、
それに加えてこういう要素を全部丁寧に見ていくのはいかにも大変である。
果たしてどうなることやら。