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

Windows で UTF-8 文字列を「std::cout」に正しく出力するにはどうすればよいですか?

2024 年 11 月 12 日に公開
ブラウズ:398

How to Output UTF-8 Strings Correctly to `std::cout` on Windows?

Windows 上の C での UTF-8 文字列の処理

文字列を UTF-8 でエンコードすることは、クロスプラットフォーム アプリケーションで広く使用されています。ただし、Windows で UTF-8 文字列を std::cout に出力すると、特有の課題が生じます。

Windows のデフォルトの動作では、std::cout は非 Unicode 形式の文字列を期待します。 UTF-8 文字列が表示されると、破損した文字が表示されます。

この問題に対処するには、主に 2 つの手順があります:

  1. コンソール コード ページを UTF-8 に設定する: SetConsoleOutputCP 関数を使用して、受信バイト ストリームが UTF-8 でエンコードされていることをコンソールに通知します。
  2. ストリーム バッファリングを有効にする: Visual の std::basic_filebuf のデフォルト動作を無効にします。 Studio。UTF-8 バイト シーケンスを分解し、個々のバイトとして渡します。これを克服するために、setvbuf はストリーム バッファリングを有効にして、文字列全体が全体として渡されるようにします。

これらの解決策を組み込んだ改訂されたコード スニペットを次に示します:

#include 
#include 
#include 
#include 

int main() {
    // Set console code page to UTF-8
    SetConsoleOutputCP(CP_UTF8);

    // Enable buffering to prevent byte-by-byte transmission
    setvbuf(stdout, nullptr, _IOFBF, 1000);

    // Output UTF-8 string
    std::string test = u8"Greek: αβγδ; German: Übergrößenträger";
    std::cout 

これらの手順に加えて、Windows コンソールのラスター フォントでは非 ASCII Unicode 文字が正しく表示されない場合があることに注意してください。適切なレンダリングを有効にするには、TrueType フォントに切り替えることをお勧めします。これは Windows 10 以降のバージョンのデフォルトです。

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

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

Copyright© 2022 湘ICP备2022001581号-3