在Windows 控制台中正確列印UTF-8 字元
本文旨在解決嘗試在Windows 控制台中列印UTF-8 字元時所面臨的挑戰
問題描述
使用者在使用特定程式碼片段顯示德語字元時遇到困難:
<code class="c++">#include <stdio.h> #include <windows.h> 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); }</code>
儘管設定了輸出代碼頁為UTF-8,德文字元無法正確列印。
解決方案
要在Windows 控制台中正確列印Unicode 數據,有幾種可用的方法:
故障排除
如果使用第三種方法輸出不正確:
<code class="c++">putc('2'); putc('0'); // doesn't work with CP_UTF8 puts("20"); // correctly writes UTF-8 data to Windows console with CP_UTF8 </code>
這是因為在使用CP_UTF8 時,控制台API 將單獨呼叫中傳遞的資料解釋為非法編碼。
要解決此問題,請考慮建立一個 Streambuf 子類,它可以準確處理多位元組字元轉換並維護寫入之間的轉換狀態。
以上是如何在Windows控制台中使用德文字元正確列印UTF-8字元?的詳細內容。更多資訊請關注PHP中文網其他相關文章!