文件名中使用的字符集

NTFS 将文件名存储在 Unicode 中。 相比之下,较旧的 FAT12、FAT16 和 FAT32 文件系统使用 OEM 字符集。 有关详细信息,请参阅代码页

创建 FAT 文件的非 Unicode 应用程序有时必须使用标准 C 运行时库转换函数在 Windows 代码页字符集和 OEM 代码页字符集之间进行转换。 使用文件系统函数的 Unicode 实现,无需执行此类转换。

应用程序可以使用泛型字符串类型,如 适用于字符串的 Windows 数据类型中所述。 应用程序还可以使用函数原型约定中所述的技术使用泛型 函数原型。 对于泛型字符串类型或泛型函数原型,应用程序可以使用单个源文件来编译 Unicode 或非 Unicode 版本。 为了允许这样做,应用程序为编译 Unicode 时未调用的函数提供宏。

在 NTFS 和 FAT 文件系统中,特殊文件名字符为:“\”、“/”、“.”、“?”和“*”。 在 OEM 代码页上,这些特殊字符位于通过 0x7F) (0x00的 ASCII 字符范围内。 它们的 Unicode 等效项是 2 字节形式的相同值,0x0000到0x007F。

注意

日语操作系统上使用的 Windows 代码页和 OEM 代码页字符集包含日元符号 (¥) ,而不是反斜杠 (\) 。 因此,日元符号是 NTFS 和 FAT 文件系统的禁止字符。 将 Unicode 映射到日语代码页时, WideCharToMultiByte 和其他转换函数将反斜杠 (U+005C) 和普通 Unicode Yen 符号 (U+00A5) 映射到此相同字符。 出于安全原因,应用程序通常不应允许 Unicode 字符串中的字符 U+00A5,该字符串可能转换为 FAT 文件名。 有关详细信息,请参阅 安全注意事项:国际功能

 

Windows API 中的 Unicode

安全注意事项:国际功能