web-dev-qa-db-ja.com

WindowsでC ++を使用してコンソールにUnicodeを出力する

私はまだC++を学んでいるので、私と私のずさんなコードには我慢してください。私が使用しているコンパイラはDev C++です。 coutを使用してコンソールにUnicode文字を出力できるようにしたい。私がするようなことをするときはいつでも:

#include <iostream>

int main()
{
    std::cout << "Hello World!\n";
    std::cout << "Blah blah blah some gibberish unicode: ĐĄßĞĝ\n";
    system("PAUSE");
    return 0;
}

ΜA■Ggのような奇妙な文字をコンソールに出力します。なぜそれが行われるのですか?ĐĄßĞĝを表示するにはどうすればよいですか?またはこれはWindowsでは不可能ですか?

25
Jesse Foley

_std::wcout_はどうですか?

_#include <iostream>

int main() {
    std::wcout << L"Hello World!" << std::endl;
    return 0;
}
_

これは標準のワイド文字出力ストリームです。

それでも、エイドリアンが指摘したように、これはcmdがデフォルトでUnicode出力を処理しないという事実に対処していません。これは、Adrianの回答で説明されているように、コンソールを手動で設定することで対処できます。

  • _/u_引数を使用してcmdを開始します。
  • _chcp 65001_を呼び出して出力形式を変更します。
  • また、コンソールでUnicodeフォントを設定します(Lucida Console Unicodeなど)。

_fcntl.h_および_io.h_を必要とする_setmode(_fileno(stdout), _O_U16TEXT);を使用することもできます( this answer で説明されており、- this blogで説明されています)投稿 )。

15
Tyn

Windows XPが必要なものを完全にサポートするかどうかはわかりません。コマンドコンソールでUnicodeを有効にするには、次の3つのことを行う必要があります。

  1. コマンドウィンドウをcmd /uで開始します。 /uは、プログラムがUnicodeを出力することを示しています。
  2. chcp 65001を使用して、コードページの1つではなくUTF-8を使用することを示します。
  3. より多くのグリフカバレッジを持つフォントを選択します。新しいバージョンのWindowsのコマンドウィンドウはLucida Console Unicodeを提供します。私のXPボックスにはLucida Consoleと呼ばれるもののサブセットがあります。非常に広範なレパートリーはありませんが、アクセント付き文字を表示するだけであれば十分です。 。
6
Adrian McCarthy

ANSI出力ストリームを使用しました。使用する必要があります
std::wcout << L"Blah blah blah some gibberish unicode: ĐĄßĞĝ\n";

また、system( "PAUSE")ではなくstd :: cin.get()を使用してください。

1
Puppy