3 回答
TA贡献1788条经验 获得超4个赞
C ++标准库不支持Unicode。char并且wchar_t 不需要是Unicode编码。
在Windows上wchar_t为UTF-16,但标准库中不直接支持UTF-8文件名(charWindows上的数据类型不是Unicode)
使用MSVC(以及Microsoft STL),提供了用于const wchar_t*文件流的构造函数,该构造函数采用文件名,从而使您可以按以下方式创建流:
wchar_t const name[] = L"filename.txt";
std::fstream file(name);
但是,C ++ 11标准未指定此重载(它仅保证存在char基于版本的版本)。从g ++ 4.8.x版本开始,它也未出现在替代STL实现中,例如用于MinGW(-w64)的GCC libstdc ++。
请注意,就像char在Windows上不是UTF8一样,在其他OS上wchar_t也可能不是UTF16。因此,总的来说,这不太可能移植。wchar_t根据标准未定义打开给定文件名的流,并且在chars中指定文件名可能很困难,因为char所使用的编码在操作系统之间有所不同。
TA贡献1825条经验 获得超4个赞
从C ++ 17开始,有一种跨平台的方法可以使用std :: filesystem :: path重载来打开具有Unicode文件名的std :: fstream 。在C ++ 20之前,您可以使用std :: filesystem :: u8path从UTF-8字符串创建路径。例:
std::ofstream out(std::filesystem::u8path(u8"こんにちは"));
out << "hello";
在C ++ 20之后,您可以通过将UTF-8传递给构造函数来创建路径std::filesystem::path(u8"こんにちは"):(不建议使用u8path)。
- 3 回答
- 0 关注
- 1170 浏览
添加回答
举报