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

Patricia Arquette
リリース: 2024-10-26 17:15:02
オリジナル
999 人が閲覧しました

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

Windows コンソールでの適切な UTF-8 文字印刷

この記事は、Windows コンソールで UTF-8 文字を印刷しようとするときに直面する課題に対処することを目的としています。 Windows コンソール。

問題の説明

ユーザーは、特定のコード スニペットを使用してドイツ語の文字を表示する際に問題が発生しました:

<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 実装。

トラブルシューティング

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

<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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!