gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:18:09 29 4
gpt4 key购买 nike

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

对于打开/读取文件,我使用的是 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() 返回指向文件名字符串的常量指针,后跟 null 终止符怎么样?因为 UTF-8 字节序列可以包含零作为代码点的一部分,所以这样的字符串可以被截断。

所以请指导我,我哪里错了,或者请提出一些可移植解决方案以防万一))

谢谢。

最佳答案

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

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

关于C++ 和带有国家符号的文件路径(可能用 utf8 编码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52581000/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com