ファイル名で使用される文字セット

NTFS では、ファイル名が Unicode に格納されます。 これに対し、古い FAT12、FAT16、FAT32 ファイル システムでは、OEM 文字セットが使用されます。 詳細については、「コード ページ」をご覧ください。

FAT ファイルを作成する Unicode 以外のアプリケーションでは、Windows コード ページ文字セットと OEM コード ページ文字セットの間で変換するために、標準の C ランタイム ライブラリ変換関数を使用する必要がある場合があります。 ファイル システム関数の Unicode 実装では、このような変換を実行する必要はありません。

アプリケーションでは、「文字列の Windows データ型」で説明されているように、汎用 文字列型を使用できます。 アプリケーションでは、「関数プロトタイプの規則」で説明されている手法を使用して、汎用 関数プロトタイプを使用することもできます。 ジェネリック文字列型またはジェネリック関数プロトタイプの場合、アプリケーションは 1 つのソース ファイルを使用して、Unicode または Unicode 以外のバージョンをコンパイルできます。 これを可能にするために、アプリケーションは Unicode のコンパイル時に呼び出されない関数のマクロを提供します。

NTFS ファイル システムと FAT ファイル システムの両方で、特殊なファイル名の文字は'\'、'/'、'.'、'?'、および '*' です。 OEM コード ページでは、これらの特殊文字は ASCII 文字の範囲 (0x00から0x7F) にあります。 Unicode と同等の値は、2 バイト形式の同じ値であり、0x007Fを介して0x0000されます。

注意事項

日本語オペレーティング システムで使用される Windows コード ページと OEM コード ページの文字セットには、円記号 (\) ではなく円記号 (¥) が含まれています。 したがって、円記号は NTFS および FAT ファイル システムでは禁止されている文字です。 Unicode を日本語のコード ページにマッピングする場合、 WideCharToMultiByte やその他の変換関数は、円記号 (U+005C) と通常の Unicode 円記号 (U+00A5) の両方をこの同じ文字にマップします。 セキュリティ上の理由から、通常、アプリケーションでは、FAT ファイル名として使用するために変換される可能性がある Unicode 文字列で文字 U+00A5 を許可しないようにする必要があります。 詳細については、「 セキュリティに関する考慮事項: 国際機能」を参照してください。

 

Windows API の Unicode

セキュリティに関する考慮事項: 国際機能