C++ 和带有国家符号的文件路径(可能用 utf8 编码)

C++ and file paths with national symbols (encoded with utf8, maybe)

我有一些跨平台代码,它应该使用一些配置文件。一切正常,除非配置文件名路径包含非 ANSI 字符。

对于 opening/reading 文件,我使用 std::ifstream。 在windows平台(MSVC)上,解决方案是使用std::ifstream的重载版本,它可以接受路径名作为wchar_t*,所以路径名编码为utf16,并且国家符号没有问题路径。

但是 NIX* 系统的解决方案是什么? 据我所知,所有这些文件名都是用 UTF-8 编码的,并且可以使用 char* 作为指向字符串的指针。 例如:

std::string path_name = ...; //assigning path name
std::ifstream fin(path_name.c_str());

但是 c_str() 怎么样 return 指向文件名字符串的常量指针,后跟 null 终止符?因为 UTF-8 字节序列可以包含零作为代码点的一部分,所以可以截断这样的字符串。

所以请指导我,我哪里错了,或者请建议一些便携式解决方案以防万一))

谢谢。

UTF-8 不包含零作为代码单元的一部分。多字节序列中的字节必须设置最高有效位。因此 UTF-8 文本可以像 ASCII 文本一样以零结尾。

因此您可以使用 path_name.c_str() 作为 UTF-8 编码的文件名。