英語版 Windows (XP、Vista または 7) 上の Visual Studio 2008 でコンパイルされた C++ コンソール アプリケーションの場合。cout または wcout を使用して、コンソールに出力し、UTF-8 でエンコードされた日本語を正しく表示することはできますか?
8 に答える
これはうまくいくはずです:
#include <cstdio>
#include <windows.h>
#pragma execution_character_set( "utf-8" )
int main()
{
SetConsoleOutputCP( 65001 );
printf( "Testing unicode -- English -- Ελληνικά -- Español -- Русский. aäbcdefghijklmnoöpqrsßtuüvwxyz\n" );
}
何かに影響するかどうかはわかりませんが、ソース ファイルはUnicode (署名付き UTF-8) として保存されます - コードページ 65001 at FILE -> Advanced Save Options ... .
Project -> Properties -> Configuration Properties -> General -> Character SetはUse Unicode Character Setに設定されています。
コンソールのフォントをLucida Consoleに変更する必要があると言う人もいますが、私の側ではConsolasとLucida Consoleの両方で表示されます。
Windows コンソールは、デフォルトでOEM コード ページを使用して出力を表示します。
コード ページを Unicode に変更するchcp 65001
には、コンソールに入力するか、 を使用してプログラムでコード ページを変更してみてくださいSetConsoleOutputCP
。
おそらく、コンソールのフォントを Unicode 範囲のグリフを持つフォントに変更する必要があることに注意してください。
MVP Michael Kaplan の記事で、コンソールから UTF-16 を正しく出力する方法について説明しています。UTF-8 を UTF-16 に変換して出力できます。
コンソールのコードページを実際に UTF8 に設定しようとしたことはありません (なぜ機能しないのかわかりません... コンソールは他のマルチバイトのコードページを問題なく処理できます)。上: SetConsoleCP および SetConsoleOutputCP。
また、文字を表示できるコンソール フォントを使用していることも確認する必要があります。SetCurrentConsoleFontEx関数がありますが、Vista 以降でのみ使用できます。
それが役立つことを願っています。
アプリの開始コンソールで、デフォルトの OEM437 CP に設定されています。Unicode テキストを stdout に出力しようとしていましたが、コンソールは UTF8 変換 _setmode(_fileno(stdout), _O_U8TEXT); に切り替わりました。Lucida TT フォントを使用しても、画面にはまだ運がありませんでした。コンソールがファイルにリダイレクトされた場合、正しい UTF8 ファイルが作成されました。
最後に私は幸運でした。「info.FontFamily = FF_DONTCARE;」という 1 行を追加しました。そしてそれは今働いています。これがあなたの助けになることを願っています。
void SetLucidaFont()
{
HANDLE StdOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_FONT_INFOEX info;
memset(&info, 0, sizeof(CONSOLE_FONT_INFOEX));
info.cbSize = sizeof(CONSOLE_FONT_INFOEX); // prevents err=87 below
if (GetCurrentConsoleFontEx(StdOut, FALSE, &info))
{
info.FontFamily = FF_DONTCARE;
info.dwFontSize.X = 0; // leave X as zero
info.dwFontSize.Y = 14;
info.FontWeight = 400;
_tcscpy_s(info.FaceName, L"Lucida Console");
if (SetCurrentConsoleFontEx(StdOut, FALSE, &info))
{
}
}
}
コンソールでchcp 65001
、コード ページを UTF-8 に変更するために入力します。