2006/12/20(水)FULLWIDTH TILDE問題
2006/12/19 25:22
WindowsのShift-JIS <-> UTF-8の変換表が本来の規格と異なるため、アプリ側の変換表で文字化けたりする問題。
VirtualDubのjobsにまとめてファイルを投げるRubyスクリプトを以前書いた。VirtualDubはUTF-8でファイル名を扱うのだが、このとき"~"を含むファイル名に対して、RubyのkconvでSJIS->UTF-8変換をしていたら"~"はWAVE DASHと解釈され\xe3809cに。しかしこれをVirtualDubからWindowsに投げると、"~"(FULLWIDTH TILDE)に戻せない。ということで「ファイルが見つかりません」となり問題が発生。
しかしコードの違いだけならまだしも割り当てられている文字そのものが違うとはまた面倒くさい……
ということで、Windows上の"~"の扱いである\xefbd9e(FULLWIDTH TILDE)に変換しないといけない。とりあえずRubyにはNKFがあるので、
NKF.nkf('-w --cp932', "~")
で変換すれば良し。なお、nkfのオプション指定はパースが厳しいようで、short optionは先に、先後に余計な空白を挟まないようにしないと上手く解釈されなかった(多分)。
今後、Windowsのファイル名をUnicodeで扱う際には念を入れてチェック。他に気をつける場面はなにがあるだろう。ファイル内部の表記はずれるのかな。Winアプリで"~"と表示されているとして、アプリ側がどのコードで保存し、表示でいじってるかとかはファイルの中を見ないと分からない?? 怖いなあ。