setFileApisToANSI 函数 (fileapi.h)
使文件 I/O 函数对当前进程使用 ANSI 字符集代码页。 此函数适用于 8 位控制台输入和输出操作。
语法
void SetFileApisToANSI();
返回值
无
备注
代码页由 SetFileApisToANSI 设置的文件 I/O 函数是由接受或返回文件名的 KERNEL32.DLL 导出的函数。 SetFileApisToANSI 设置每个进程的代码页,而不是每个线程或每台计算机。
SetFileApisToANSI 函数补充了 SetFileApisToOEM 函数,这会导致同一组文件 I/O 函数使用 OEM 字符集代码页。
默认情况下,8 位控制台函数使用 OEM 代码页。 默认情况下,所有其他函数都使用 ANSI 代码页。 这意味着控制台函数返回的字符串可能无法由其他函数正确处理,反之亦然。 例如,如果 FindFirstFileA 函数返回包含某些扩展 ANSI 字符的字符串,并且 8 位控制台函数设置为使用 OEM 代码页,则 WriteConsoleA 函数无法正确显示该字符串。
使用 AreFileApisANSI 函数确定文件 I/O 函数集当前使用的代码页。 使用 SetConsoleCP 和 SetConsoleOutputCP 函数设置 8 位控制台函数的代码页。
若要解决代码页不兼容的问题,最好对控制台应用程序使用 Unicode。 使用 Unicode 的控制台应用程序比使用 8 位控制台功能的控制台应用程序多用途得多。 除该解决方案外,控制台应用程序可以调用 SetFileApisToOEM 函数,使文件 I/O 函数集使用 OEM 字符集字符串而不是 ANSI 字符集字符串。 使用 SetFileApisToANSI 函数将这些函数设置回 ANSI 代码页。
处理命令行时,控制台应用程序应获取 Unicode 格式的命令行,然后使用相关的字符到 OEM 函数将其转换为 OEM 形式。 另请注意,在这种情况下,命令行main函数的 argv 参数中的数组包含 ANSI 字符集字符串。
在 Windows 8 和 Windows Server 2012 中,此函数由以下技术支持。
技术 | 支持 |
---|---|
服务器消息块 (SMB) 3.0 协议 | 是 |
SMB 3.0 透明故障转移 (TFO) | 是 |
具有横向扩展文件共享的 SMB 3.0 (SO) | 是 |
群集共享卷文件系统 (CSV) | 是 |
弹性文件系统 (ReFS) | 是 |
要求
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | fileapi.h (包括 Windows.h、WinBase.h) |
Library | Kernel32.lib |
DLL | Kernel32.dll |