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 關注
- 1316 瀏覽
添加回答
舉報