首頁 >後端開發 >C++ >如何在Windows控制台中使用德文字元正確列印UTF-8字元?

如何在Windows控制台中使用德文字元正確列印UTF-8字元?

Patricia Arquette
Patricia Arquette原創
2024-10-26 17:15:021085瀏覽

How to Print UTF-8 Character Correctly in Windows Console with German Characters?

在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 數據,有幾種可用的方法:

  1. 直接使用WriteConsoleW: 使用WriteConsoleW 明確與控制台API 通訊。這種方法可確保資料正確寫入控制台。但需要區分控制台和非控制台輸出情況。
  2. 設定輸出模式:透過_setmode 設定標準輸出檔案描述子的輸出模式為「_O_U16TEXT」或「_O_U8TEXT」。這使得寬字元輸出函數能夠將 Unicode 資料正確輸出到控制台。請注意,此方法需要在所選流上僅使用寬字元函數。
  3. CP_UTF8 編碼: 透過將控制台輸出代碼頁設定為 CP_UTF8 並使用適當的方法,將 UTF-8 文字直接列印到控制台低階函數或自訂 ostream 實現。

故障排除

如果使用第三種方法輸出不正確:

<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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn