下面的代碼應該將一個 wstring "!" 轉換為一個字串并輸出它,
setlocale(LC_ALL, "Chinese_China.936");
//system("chcp 936");
std::wstring ws = L"!";
string as((ws.length()) * sizeof(wchar_t), '-');
auto rs = wcstombs((char*)as.c_str(), ws.c_str(), as.length());
as.resize(rs);
cout << rs << ":" << as << endl;
如果不帶 運行它system("chcp 936");,轉換后的字串是“£?”而不是“!”。如果使用system("chcp 936");,則結果在控制臺專案中是正確的。

但是在我的基于 Dialog 的專案中,它system("chcp 936")是沒用的,即使它是可行的,我也不能使用它,因為它會彈出一個控制臺。

PS:IDE是Visual Studio 2019,我的源代碼以帶有簽名的UTF-8格式存盤。我的作業系統語言是英語,非 unicode 程式的語言是英語(美國)。

編輯:這很有趣,即使使用“en-US”語言環境,“!”也可以轉換為 ASCII“!”。

但我不明白我在基于對話框的專案中得到的“£?”。
uj5u.com熱心網友回復:
有兩個不同的地方需要考慮區域設定:
- 您必須告訴程式在將 unicode 字符轉換為純位元組時應該使用什么字符集(這是 的作用
setlocale) - 你必須告訴終端它應該呈現什么字符集(這是
chcpWindows 控制臺中的角色)
第一點取決于您在程式中使用的語言和可選庫(這里是 C 語言和標準庫)
第二點取決于控制臺應用程式和底層系統。Windows 控制臺使用chcp,您將在
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/402860.html
標籤:
