3 回答

TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個(gè)贊
C ++標(biāo)準(zhǔn)庫不支持Unicode。char并且wchar_t 不需要是Unicode編碼。
在Windows上wchar_t為UTF-16,但標(biāo)準(zhǔn)庫中不直接支持UTF-8文件名(charWindows上的數(shù)據(jù)類型不是Unicode)
使用MSVC(以及Microsoft STL),提供了用于const wchar_t*文件流的構(gòu)造函數(shù),該構(gòu)造函數(shù)采用文件名,從而使您可以按以下方式創(chuàng)建流:
wchar_t const name[] = L"filename.txt";
std::fstream file(name);
但是,C ++ 11標(biāo)準(zhǔn)未指定此重載(它僅保證存在char基于版本的版本)。從g ++ 4.8.x版本開始,它也未出現(xiàn)在替代STL實(shí)現(xiàn)中,例如用于MinGW(-w64)的GCC libstdc ++。
請(qǐng)注意,就像char在Windows上不是UTF8一樣,在其他OS上wchar_t也可能不是UTF16。因此,總的來說,這不太可能移植。wchar_t根據(jù)標(biāo)準(zhǔn)未定義打開給定文件名的流,并且在chars中指定文件名可能很困難,因?yàn)閏har所使用的編碼在操作系統(tǒng)之間有所不同。

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個(gè)贊
從C ++ 17開始,有一種跨平臺(tái)的方法可以使用std :: filesystem :: path重載來打開具有Unicode文件名的std :: fstream 。在C ++ 20之前,您可以使用std :: filesystem :: u8path從UTF-8字符串創(chuàng)建路徑。例:
std::ofstream out(std::filesystem::u8path(u8"こんにちは"));
out << "hello";
在C ++ 20之后,您可以通過將UTF-8傳遞給構(gòu)造函數(shù)來創(chuàng)建路徑std::filesystem::path(u8"こんにちは"):(不建議使用u8path)。
- 3 回答
- 0 關(guān)注
- 1317 瀏覽
添加回答
舉報(bào)