最近のファイルシステムはユニコードで決め打ちされているので考慮する必要はない。FATなどの古いファイルシステムでのみ問題になる。(厳密にはUCS-2でUTF-16非対応だったりするけど。)
FAT32ショートファイル名ならShift_JISなど(正確にはcp932)。ロングファイル名(8.3形式でない名前)は後付け規格なので問題ない。
基本的にUTF-8。
ソフトウェアが解釈できるエンコードはソフトによる。ASCIIしか表示できないアプリもあれば、UTF-8を解釈できたり、EUC-JPのままだったりする古いアプリもある。
Java自体ユニコードに対応しているので、HTTPなどで外から取得したバイナリを下手に変換しない限り考慮する必要は無い。
vfatマウントについては、
http://archive.linux.or.jp/JF/JFdocs/kernel-docs-2.6/filesystems/vfat.txt
がわかりやすい。
/dev/block/vold/179:1 /mnt/sdcard vfat rw,dirsync,nosuid,nodev,noexec,noatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0Xperiaデフォルトの文字コード関連オプションは、codepage=cp437,iocharset=iso-8859-1,utf8なので、ショートファイル名には1バイト文字、ロングファイル名とOS内部とのIOはUTF-8変換がなされる。
もし接続したSDメモリなどのショートファイルに日本語文字が含まれてしまっていて、正しく読み書きできない場合は、codepage=cp932にすれば解決するはず。
USB-OTGでFATファイルシステムをマウントする場合、マウントオプションでcodepage=cp437,utf8を指定すれば、windowsマシンに持って行っても文字化けしたりアクセスできなくなることは無いはず。
だけど、デザイアさんが四苦八苦していた。有償版StickMountが発行するマウントオプションが知りたい。
もしかしたら、nexus7はSDメモリ非対応なのでFAT用のnls_cp437が入っていないのかも。nls_cp437.koとnls_utf8.koをいれればどうにかなるかも?
なおCIFSで日本語の読み書きにはiocharset=utf8にする必要があった。
ウィンドウズファイル共有自体はUTF-16で決め打ちなので、SMBプロトコルとOS内部間でUTF-16/UTF-8変換が必要で、nls_utf8.koも同時に必要だった。
もしかしたら、nexus7はSDメモリ非対応なのでFAT用のnls_cp437が入っていないのかも。nls_cp437.koとnls_utf8.koをいれればどうにかなるかも?
ウィンドウズファイル共有自体はUTF-16で決め打ちなので、SMBプロトコルとOS内部間でUTF-16/UTF-8変換が必要で、nls_utf8.koも同時に必要だった。


