24

英語版 Windows (XP、Vista または 7) 上の Visual Studio 2008 でコンパイルされた C++ コンソール アプリケーションの場合。cout または wcout を使用して、コンソールに出力し、UTF-8 でエンコードされた日本語を正しく表示することはできますか?

4

8 に答える 8

13

これはうまくいくはずです:

#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 SetUse Unicode Character Setに設定されています。

コンソールのフォントをLucida Consoleに変更する必要があると言う人もいますが、私の側ではConsolasLucida Consoleの両方で表示されます。

于 2016-02-23T11:46:34.133 に答える
9

Windows コンソールは、デフォルトでOEM コード ページを使用して出力を表示します。

コード ページを Unicode に変更するchcp 65001には、コンソールに入力するか、 を使用してプログラムでコード ページを変更してみてくださいSetConsoleOutputCP

おそらく、コンソールのフォントを Unicode 範囲のグリフを持つフォントに変更する必要があることに注意してください。

于 2009-09-03T01:55:38.570 に答える
7

MVP Michael Kaplan の記事で、コンソールから UTF-16 を正しく出力する方法について説明しています。UTF-8 を UTF-16 に変換して出力できます。

于 2009-09-03T08:50:24.507 に答える
4

コンソールのコードページを実際に UTF8 に設定しようとしたことはありません (なぜ機能しないのかわかりません... コンソールは他のマルチバイトのコードページを問題なく処理できます)。上: SetConsoleCP および SetConsoleOutputCP。

また、文字を表示できるコンソール フォントを使用していることも確認する必要があります。SetCurrentConsoleFontEx関数がありますが、Vista 以降でのみ使用できます。

それが役立つことを願っています。

于 2009-09-03T02:04:50.073 に答える
1

アプリの開始コンソールで、デフォルトの 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))
        {
        }
    }
}
于 2015-11-20T00:55:26.753 に答える
0

コンソールでchcp 65001、コード ページを UTF-8 に変更するために入力します。

于 2009-09-03T01:49:27.590 に答える