漢字コードで怖い目に合いました(--;)

昨日、これに使うためのデータファイルを作っていたんですが、とっても怖い目に合いました。

時刻表データはWindows機で作られるので漢字コードはS-JISになってます。でも、処理はUbuntuで行わせるので、漢字コードはUTF-8Nです。このために、nkfというツールを使って、時刻表データをUTF-8Nに変換し、sedで処理したあと、再度nkfS-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!