android の文字コードの怪
最近は、android 端末に PDF を突っ込んだり、漫画を自炊した画像ファイルを突っ込んだりすることが増えてきた。2、3人でプチプレゼンみたいなことになったときには、android 端末を見せながら……というのは便利だし、行き帰りで本を読むときにも、確かにこれは便利である。
しかし、前々からどうにも気になっていることがあった。他人と FAT32 フォーマットの USB メモリスティックや micro SD カードでファイルをやりとりするときに、ファイル名に日本語を使われることがあって、これを Linux 端末を経由して android に持ち込むと化け化けになってしまうのだ。
更に都合の悪いことに、僕は、
- Microsoft Windows (xp, Vista, 7, 8)
- Mac OS X
- Debian GNU/Linux
- android
今までは、とりあえすファイル名を UTF-8 にしておけば、不都合が生じることはあまりなかった。しかし、android 端末では、これをやってもファイル名が化け化けになってしまう。もう何が何だか……という感じである。
ファイル名の文字コードを変更するユーティリティとしては、convmv という perl スクリプトがある。これであれこれ変えてみるのだが、どうしても android 上に持ち込むと化ける。何だろう……と思いつつ調べていると、メディアを Linux で mount するときに、オプションに "iocharset=utf8,shortname=mixed,utf8" を付けておくといける、という話を聞く。vfat で mount する際に試してみると、なるほど、android 上で作成した日本語ファイル名のファイルが、ちゃんと名前が化けることなく表示できる。まあそれはいいんだが、じゃあ化けるファイル名をどう変換したら読めるようになるんだ?
android 上で作成した日本語ファイル名のコードを調べようと、kcc -c とかやってみると、ASCII でござい、と返事が返ってくる。あー kcc は Unicode を正しく判別できないんだっけ、と "echo * | nkf --guess" などとやってみると、化けているものも表示できるものも、どちらも UTF-8 です、と言われる。うー。じゃあどうして片方は化けてもう片方は化けないのさ。
結局、Windows とか今回のような android とかの話になると、こういう問題が出てくるわけだ。奥村氏の blog でファイル名の文字コードに関するボヤキを発見してしまい、何とまあ面倒な話なのかねえ、と僕も軽く溜息をついたのであった。