質問: お世話になります。 日本語版のwindows10のファイル名の文字コードはなんという文字コードなのでしょうか。 てっきりshift-jisだと思っていたのですが、タイ語などshift-jisに含まれない文字(= pythonの `.encode('sjis_2004')` でエンコードできない文字)もファイル名に付けることができます。 これは、ファイル名がutf-8等のユニコードの符号化形式でエンコードされている、と考えていいのでしょうか。 何卒よろしくおねがいします。
回答: Windowsは内部処理がUnicode化されています。その上で、アプリケーションに提供されるAPIはUnicodeバージョンとANSI(日本語版ではShift-JIS)バージョンの2種類が提供されています。ANSIバージョンが呼ばれた場合には必要に応じて文字コード変換されます。 その上で、ファイルシステムAPIにおいても同様です。実際のストレージがどのような文字コードを採用していようがWindows内部ではUnicodeで処理されます。 よって、アプリケーションがUnicodeバージョンのファイルシステムAPIを呼び出し、尚且つ実際のストレージがUnicodeを採用している場合に、ファイル名としてUnicodeが使用できます。 その上で、NTFS(実のところFAT32やFAT16もVFATがあるので)ではUnicodeを採用しています。 なお、UNIX系OSではOS内部で文字コード変換しておらず、またファイルシステムAPIもアプリケーションから渡されたバイト列をそのままストレージに書き込みます。そのため、アプリケーションがストレージ毎に文字コードを意識して処理する必要があります。