2

わかりましたので、C++ (Visual Studio 2012 Express) を使用して、W8 でアクセント (フランス語) 付きの json 形式のテキスト ファイルを読み込もうとしています。

これはファイルです:

    {"products": [{"id": 125, "label": "Billél"}, {"id": 4, "label": "Rùbin"}]}

UTF-8 (BOM なし) でエンコードされた 1 行は、D:/p.txt として保存されます。

これは C++ での読み取りコードです。

    std::ifstream in("D:/p.txt", std::ios::binary | std::ios::in);
    std::string content( (std::istreambuf_iterator<char>(in) ), (std::istreambuf_iterator<char>()    ) );

私が得る出力:

    {"products": [{"id": 125, "label": "Bill├®l"}, {"id": 4, "label": "R├╣bin"}]}

CharToOemAを使用してみました:

   {"products": [{"id": 125, "label": "Billél"}, {"id": 4, "label": "Rùbin"}]}

私のコードページでは、コンソールにアクセントを表示できるはずです (そのようなアクセントをエコーし​​てみたところ、完全に良好な表示が得られました)。私の c++ コンソールの入力コードページと出力コードページはどちらも CP850 (IBM インターナショナル Latin-1) です。

コンソールに正しいアクセントを出力するコードを取得するにはどうすればよいですか? 可能であれば、最終的にはクロスプラットフォーム ソリューションが必要になります。

4

2 に答える 2

0

UTF-8 があり、ISO 8859-1 を期待するウィンドウに出力すると、うまくいきません。UTF-8 を使用している場合 (グローバル ロケールがまだデフォルトである場合"C")、ウィンドウをコード ページ 65001 に変更するか、出力する前にエンコーディングを変換する必要があります。

移植性に関しては、本当の解決策はありません。何をしなければならないかは、出力したバイトを宛先がどのように解釈するかによって異なります。Windows では、コード ページを変更できます。Unix システム (X Windows) では、重要なのはウィンドウが使用するフォントのエンコーディングです。どちらの場合も、同じマシン上の異なるウィンドウでは異なる場合があります。

于 2013-06-17T10:18:47.523 に答える
0

MSDN によるとchcp 65001、コード ページを UTF-8 に切り替える必要があるを使用してみましたか。また、デフォルトのコンソール フォントではすべての UTF8 グリフを表示できない可能性があることに注意してください。代わりに使用することをお勧めします。Lucida Console

于 2013-06-17T10:18:56.443 に答える