Windows 控制台中正確的UTF-8 字元列印
Windows 控制台中正確的UTF-8 字元列印本文旨在解決嘗試在Windows 控制台中列印UTF-8 字元時所面臨的挑戰Windows 控制台。
問題描述#include
#include
int main() {
SetConsoleOutputCP(CP_UTF8);
// German characters not appearing
char const* text = "aäbcdefghijklmnoöpqrsßtuüvwxyz";
int len = MultiByteToWideChar(CP_UTF8, 0, text, -1, 0, 0);
wchar_t *unicode_text = new wchar_t[len];
MultiByteToWideChar(CP_UTF8, 0, text, -1, unicode_text, len);
wprintf(L"%s", unicode_text);
}
使用者在使用下列指令顯示德文字元時遇到困難具體程式碼片段:#include
CP_UTF8 編碼: 透過將控制台輸出代碼頁設為 CP_UTF8 並使用適當的方法,將 UTF-8 文字直接列印到控制台低階函數或自訂 ostream實作。
故障排除#include
#include
int main() {
SetConsoleOutputCP(CP_UTF8);
// German characters not appearing
char const* text = "aäbcdefghijklmnoöpqrsßtuüvwxyz";
int len = MultiByteToWideChar(CP_UTF8, 0, text, -1, 0, 0);
wchar_t *unicode_text = new wchar_t[len];
MultiByteToWideChar(CP_UTF8, 0, text, -1, unicode_text, len);
wprintf(L"%s", unicode_text);
}
第三種方法輸出不正確的情況:putc('\302') ; putc('\260'); // 不適用於CP_UTF8 投入(“\ 302 \ 260”); // 使用CP_UTF8 正確地將UTF-8 資料寫入Windows 控制台
這是因為在使用CP_UTF8 時,控制台API 將單獨呼叫中傳遞的資料解釋為非法編碼。
要解決此問題,請考慮建立準確處理多位元組字元轉換並維護寫入之間的轉換狀態的 Streambuf 子類別。免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3