0220login:Penguin
2019/08/23(金) 16:49:16.77ID:DNlnSXa/何を逝っているのかわからないので、なぜ日本語Windows 10でのFAT32で、ShiftJISでの
ファイル名とUTF-16でのファイル名の両方が記録されているか説明するね
FAT12/16はMS-DOS用のファイルシステムで、8バイトのファイル名+3バイトの拡張子で
ファイル名が記録され、FAT32はWindows 95 OSR2で採用されたファイルシステムだけど
DOSとの互換性から同様に8バイトのファイル名+3バイトの拡張子で記録される
MS-DOSの国際化の仕組みに従い、FATでは今も日本語Windowsの標準ではコードページ 932、
ShiftJISでファイル名を書き込むようになっている
したがってFAT上ではShiftJISでファイル名が記録される
もう一つWindows 95あたりからVFATというFATへの拡張が導入され、8+3バイトのファイル名とは
別に長いファイル名(LFN)を持てるようになった
特殊なファイルとして長いファイル名の情報がUTF-16で記録され、FATとの互換を保つために
FATでのファイル名とLFNは同期されるようになっていて、LFNでのProgram FilesがFAT上では
PROGRA~1のように記録される
よってLFNとしてUTF-16でのファイル名が記録されるので、ShiftJISとUTF-16の両方の
ファイル名が記録されることになる
FATでのファイル名とLFNは同期がとれていないとダメなので、日本語Windowsの標準コード
ページ 932ならば、LFNで使える文字もFATでのファイル名に使うShiftJISに縛られてしまう
そうでないとDOSとの互換性が損なわれる
LinuxはUTF-8が標準で、Windowsでもコードページを65001にすればFATでのファイル名
の文字コードもUTF-8になるはずだから、そうすればShiftJISから離れられるけど、
世の中のほとんどのPCはコードページ 932だから文字化けする
FAT32≠VFATなことに注意