第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何使用Unicode文件名打開std :: fstream(流或ifstream)?

如何使用Unicode文件名打開std :: fstream(流或ifstream)?

C++
明月笑刀無情 2019-10-21 11:01:56
您不會(huì)想到像使用針對(duì)Windows應(yīng)用程序的C ++標(biāo)準(zhǔn)庫打開文件這樣的基本操作是棘手的……但是看起來確實(shí)如此。這里所說的Unicode是指UTF-8,但是我可以轉(zhuǎn)換為UTF-16或其他任何形式,關(guān)鍵是要從Unicode文件名獲取一個(gè)ofstream實(shí)例。在整理自己的解決方案之前,這里有首選的方法嗎?尤其是跨平臺(tái)的一個(gè)?
查看完整描述

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)之間有所不同。


查看完整回答
反對(duì) 回復(fù) 2019-10-21
?
鳳凰求蠱

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)。


查看完整回答
反對(duì) 回復(fù) 2019-10-21
  • 3 回答
  • 0 關(guān)注
  • 1317 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)