漢字コードで怖い目に合いました(--;)
昨日、これに使うためのデータファイルを作っていたんですが、とっても怖い目に合いました。
時刻表データはWindows機で作られるので漢字コードはS-JISになってます。でも、処理はUbuntuで行わせるので、漢字コードはUTF-8Nです。このために、nkfというツールを使って、時刻表データをUTF-8Nに変換し、sedで処理したあと、再度nkfでS-JISに変換するようにしました。
こう書くと簡単ですが、これに気付くまでに半日は潰れましたね。「こんなファイルは知らねえ(--#)」とUbuntuに何回怒られたことか(^^;)
時刻表データの関連を表すデータファイルは、Ubuntuのスクリプトで扱うのでUTF-8Nで作りました。Windowsのエディタで複数の漢字コードに対応しているのがあるので、これはあまり難しくありませんが。
ところがです。このデータファイルを更新していくと、たまに「こんなファイルは知らねえ(--#)」と怒られるんですね。どうも文字化けを起こすようで。不思議なのは、更新した場所とは違うところで怒られるんです。
こうなると、行を入れ替えたりしても、怒られ続けます。怒られる行番号は同じ。行を入れ替えたのにですよ。
それで、漢字コードを変更してみることにしました。まずUTF-8NからS-JISに。Ubuntuでは全く読めないですね(^^;)
次に、UTF-8というのを見つけたので、それにしてみたところ、UTF-8Nと違っているようには見えません。ただ、何故か怒られる場所が動きました。それで、UTF-8Nに戻したら何故か怒られ無くなりました(^^)
喜んで、処理した時刻表データをシンクロツールを使ってWindowsのフォルダに移したんですが...
このフォルダをエクスプローラーで眺めようとすると、エクスプローラーが暴走します。ご存知のようにWindowsでエクスプローラーが暴走するとシャットダウンにも苦労しますよね。それに原因がわからず途方にくれました。
色々テストした結果、件の時刻表の読み書きは出来るのにエクスプローラーで一覧を見ることが出来ないことがわかりました。
それで、Ubuntu側のフォルダを眺めると...妙なファイルが出来ています。これがシンクロツールでWindowsのフォルダにコピーされて何か起こしているんでしょう。多分、この妙なファイルだけがファイル名がUTF-8なんですね。ほかはUTF-8Nなのに。
そう言えばファイルの読み書きに使うAPI群はファイル名に鈍感なんですが、一覧を作るときには例えばファイル名称でソートしたりします。この時は漢字コードに敏感なんですよね。
というわけで、UTF-8とUTF-8Nは似て非なるものであることがよーくわかりました。で、UTFって何でしたっけ?今度調べてみよーっと(^^;)
from ですくとっぷ powered by HatenaSync!