10

wcoutを使ってアラビア語と中国語が混ざったメッセージを表示したいです。

次のコードは問題ありません。

#include <iostream>

using namespace std;

int main()
{
    wcout.imbue(locale("chs"));
    wcout << L"中文"; // OK
}

ただし、次のコードは機能しません。

#include <iostream>

using namespace std;

int main()
{
    wcout.imbue(locale(/* What to place here ??? */));
    wcout << L"أَبْجَدِيَّة عَرَبِيَّة‎中文"; // Output nothing. VC++ 2012 on Win7 x64
    // Why does the main advantage of unicode not apply here?
}

ユニコードの採用後、コードページの概念は廃止されるべきだと思います。

Q1. wout がそのようなテキストを表示するメカニズムは何ですか?

Q2. Unicode ベースの OS である Windows が、コンソール ウィンドウでの Unicode 文字の出力をサポートしていないのはなぜですか?

4

5 に答える 5

6

CRTは、デフォルトでファイルへのすべての出力をANSIとして扱います。プログラムの開始時にこの行で変更できます

_setmode(_fileno(stdout), _O_WTEXT);

良いリファレンス@http ://www.siao2.com/2008/03/18/8306597.aspx

参考までに、双方向言語のサポートはほとんどのコマンドプロンプトで制限されており、私が理解していることから、この問題の原因となっている制限がここにあります。それがサポートされていない/サポートされていない理由は私が答えることができないものです。

于 2013-02-04T16:51:32.477 に答える
2

私はちょうどこの記事を読んだ

「まとめに…

Visual C++ を使用している場合、UTF-8 を使用してテキストを std::cout に出力することはできません。

それでもやりたい場合は、wcout と cout を機能させる方法に関するこの驚くほど長い記事を読んでください。しかし、それは実際には単純な解決策を提供するものではなく、最終的にストリーム バッファの再定義に陥ります..." http://alfps.wordpress .com/2011/12/08/unicode-part-2-utf-8-stream-mode/

(このブログからhttp://blog.cppcms.com/post/105 )

于 2013-02-10T00:55:08.047 に答える
1

あなたはこれを試すことができます:

中国語のみのテキストをレンダリングできたと思います。これは、中国語のフォントファイルがあることを意味します。

アラビア語のみのテキストでお試しください。レンダリングできる場合は、システムにアラビア語フォントがあることを意味します。

ただし、これをアラビア語と中国語で組み合わせる場合は、両方のグリフセットを含むフォントファイルを強制的に選択する必要があります。wcoutが取得するデフォルトのフォントファイルには、アラビア語のグリフが含まれていないと思います。

アラビア語のUnicode用のボックスを入手している可能性があると思います。

于 2013-02-14T19:55:21.643 に答える