如本問題所述,我正在將 wstring 轉換為帶有 std::codecvt_utf8 的字串,但是當我嘗試希臘或中文字母符號已損壞時,我可以在除錯本地視窗中看到它,例如日本變成了 "?—¥??? ”
std::wstring_convert<std::codecvt_utf8<wchar_t>> myconv; //also tried codecvt_utf8_utf16
std::string str = myconv.to_bytes(wstr);
我究竟做錯了什么?
uj5u.com熱心網友回復:
std::string只保存一個位元組陣列。它不保存有關這些位元組應該被解釋的編碼的資訊,標準庫函式或std::string成員函式通常也不假定任何有關編碼的資訊。他們將內容作為一個位元組陣列來處理。
因此,當std::string需要呈現a 的內容時,呈現者需要對字串的預期編碼進行一些猜測,如果該資訊沒有以某種其他方式提供。
鑒于您使用的是std::codecvt_utf8.
但是,如果您使用的是 Virtual Studio,除錯器只會假設一種特定的編碼,至少在默認情況下是這樣。該編碼不是 UTF8,但我想可能是代碼頁 1252。
作為驗證,python 給出了以下內容:
>>> '日本'.encode('utf8').decode('cp1252')
'?—¥???'
您的字串似乎是日本解釋為 cp1252 編碼的 UTF8編碼。
因此,轉換似乎按預期作業。
正如@MarkTolonen 在評論中所提到的,可以在 Visual Studio 除錯器中使用說明s8符將字串變數的編碼指定為 UTF8 ,如檔案中所述。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/404657.html
標籤:
上一篇:如何在C中檢查空字符指標
下一篇:如何在迭代結束時做其他事情
