」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在Windows控制台中使用德文字元正確列印UTF-8字元?

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

發佈於2024-11-09
瀏覽:914

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

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 #include int main() { SetConsoleOutputCP(CP_UTF8); // 德文字元沒有出現 char const* text = "aäbcdefghijklmnoöpqrsßtuüvwxyz"; int len = MultiByteToWideChar(CP_UTF8, 0, 文本, -1, 0, 0); wchar_t *unicode_text = 新 wchar_t[len]; MultiByteToWideChar(CP_UTF8, 0, 文本, -1, unicode_text, len); wprintf(L"%s", unicode_text); }儘管將輸出代碼頁設為 UTF-8,但德語字元仍無法正確列印。

解決方案
  1. 在Windows控制台,有以下幾種可用方法:
  2. 使用WriteConsoleW直接: ] 使用WriteConsoleW 明確與控制台API 進行通訊。這種方法可確保資料正確寫入控制台。但需要區分控制台和非控制台輸出情況。
  3. 設定輸出模式:透過_setmode設定標準輸出檔案描述子的輸出模式為「_O_U16TEXT」或「_O_U8TEXT」。這使得寬字元輸出函數能夠將 Unicode 資料正確輸出到控制台。請注意,此方法要求僅在所選流上使用寬字元函數。

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 將單獨呼叫中傳遞的資料解釋為非法編碼。 How to Print UTF-8 Character Correctly in Windows Console with German Characters?

要解決此問題,請考慮建立準確處理多位元組字元轉換並維護寫入之間的轉換狀態的 Streambuf 子類別。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3