标准 C 库中的 Unicode 文件处理
使用 C 标准库打开文件的任务对于 Windows 应用程序和 Unicode 来说尤其具有挑战性文件名。在这种情况下,Unicode 通常指的是 UTF-8。
C 标准库缺乏内在的 Unicode 支持。 char 和 wchar_t 本质上不是 Unicode 编码。在 Windows 上,wchar_t 表示 UTF-16,但标准库缺乏对 UTF-8 文件名的显式支持(char 在 Windows 上是非 Unicode)。
Microsoft STL 为接受 const wchar_t 的文件流提供了一个构造函数* 文件名,允许按如下方式创建文件:
wchar_t const name[] = L"filename.txt"; std::fstream file(name);
但是,此重载不符合 C 11 标准(仅保证基于字符的版本)。它在替代 STL 实现中也不存在,例如从 g 4.8.x 开始,GCC 的 MinGW(-w64) libstdc。
请注意,平台差异会影响编码解释。 Windows 上的 char 不是 UTF-8,而其他操作系统上的 wchar_t 可能不是 UTF-16。因此,可移植性是一个问题。标准未定义从 wchar_t 文件名打开流,并且由于操作系统相关的编码变化,在 char 中指定文件名可能会出现问题。
以上是如何在标准 C 中可靠地处理 Unicode 文件名?的详细内容。更多信息请关注PHP中文网其他相关文章!