Mik*_*ail 5 c++ utf-8 filepath boost-filesystem c++17
我在 Windows 上,并且正在std::filesystem::path从std::string. 根据构造函数参考(强调我的):
如果源字符类型为
char,则假定源的编码是本机窄编码(因此在 POSIX 系统上不会发生转换)
如果我理解正确的话,这意味着字符串内容将在 Windows 下被视为以 ANSI 编码。要将其视为以 UTF-8 编码,我需要使用std::filesystem::u8path()function. 请参阅演示:http://rextester.com/PXRH65151
我希望 的构造函数path将窄字符串的内容视为 UTF-8 编码。因为boost::filesystem::path我可以使用imbue()方法来做到这一点:
boost::filesystem::path::imbue(std::locale(std::locale(), new std::codecvt_utf8_utf16<wchar_t>()));
Run Code Online (Sandbox Code Playgroud)
但是,我在 中没有看到这样的方法std::filesystem::path。有没有办法实现这种行为std::filesystem::path?还是我需要u8path随地吐痰?
出于性能考虑,path没有全局方法来定义区域设置转换。由于 C++ pre-20 没有 UTF-8 字符串的特定类型,因此系统假定所有char字符串都是窄字符串。因此,如果您想使用 UTF-8 字符串,则必须通过向构造函数提供适当的转换区域设置或使用u8path.
C++20 给了我们char8_t,它总是被假定为 UTF-8。因此,如果您始终使用char8_t基于 - 的字符串(例如std::u8string),path则 的隐式转换将接受它并正常工作。
| 归档时间: |
|
| 查看次数: |
1706 次 |
| 最近记录: |