簡體   English   中英

消耗UTF-8 BOM

[英]Consuming UTF-8 BOM

給出以下代碼:

typedef std::codecvt_utf8_utf16<wchar_t, 0x10ffff, std::codecvt_mode::consume_header> MyCodeCvt;
std::wifstream myStream("Test.txt");
std::locale myLocale(myStream.getloc(), new MyCodeCvt());
myStream.imbue(myLocale);
wstring str;
myStream >> str;
myStream.close();

這會正確消耗“ Test.txt”的前3個字節中的UTF-8 BOM(EF,BB,BF),並且“ str”已正確設置為其后的數據,但是任何人都可以解釋原因,如果我現在在typedef 中將std :: codecvt_mode :: consume_header更改(std :: codecvt_mode)0 ,它仍然會消耗BOM? 現在應該不應該在“ str”中顯示這3個BOM表字符,否則我是否丟失了某些內容。 請注意,我正在使用Visual Studio2013。謝謝。

感謝大家的幫助。 事實證明這是一個環境問題。 我在另一台計算機上安裝了VS2013,該問題不再發生。 對此感到驚訝,我在有問題的計算機上卸載並重新安裝了該計算機,該計算機也不再在那里出現。 毫無疑問,只是您典型的程序員的SNAFU(希望我每個人都有一個鎳)。 再次感謝。

如果在讀取以字節順序標記開頭的文件時未選擇std :: consume_header,則Unicode字符U + FEFF(零寬度不間斷空格)將被讀取為字符串內容的第一個字符。

http://en.cppreference.com/w/cpp/locale/codecvt_mode

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM