「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Windows コンソールでドイツ語の文字を含む UTF-8 文字を正しく印刷するにはどうすればよいですか?

Windows コンソールでドイツ語の文字を含む UTF-8 文字を正しく印刷するにはどうすればよいですか?

2024 年 11 月 9 日に公開
ブラウズ:558

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

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);
}

出力コードページを UTF-8 に設定しているにもかかわらず、ドイツ語の文字は正しく印刷されません。

解決策

Unicode データを正しく印刷するにはWindows コンソールには、いくつかの使用可能な方法があります:

  1. WriteConsoleW を直接使用する: WriteConsoleW を使用して明示的にコンソール API と通信します。このアプローチにより、データがコンソールに正しく書き込まれることが保証されます。ただし、コンソール出力状況と非コンソール出力状況を区別する必要があります。
  2. 出力モードの設定: _setmode を使用して、標準出力ファイル記述子の出力モードを「_O_U16TEXT」または「_O_U8TEXT」に設定します。これにより、ワイド文字出力関数が Unicode データをコンソールに正しく出力できるようになります。この方法では、選択したストリームでワイド文字関数のみを使用する必要があることに注意してください。
  3. CP_UTF8 エンコーディング: コンソール出力コードページを CP_UTF8 に設定し、適切なコマンドを使用することにより、UTF-8 テキストをコンソールに直接出力します。低レベル関数またはカスタム ostream 実装。

トラブルシューティング

3 番目の方法で出力が正しくない場合:

putc('\302'); putc('\260'); // doesn't work with CP_UTF8

puts("\302\260"); // correctly writes UTF-8 data to Windows console with CP_UTF8 

これは、CP_UTF8 を使用する場合、コンソール API が別の呼び出しで渡されたデータを不正なエンコーディングとして解釈するためです。

これを解決するには、マルチバイト文字変換を正確に処理し、書き込み間の変換状態を維持する streambuf サブクラス。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3