0

「\uhhhh」を使用する場合の UNICODE_STRING_SIMPLE マクロの動作を理解する必要があります

次のコードがあります。

cout<<"Char print out for À"<<endl;
SCAUString us = UNICODE_STRING_SIMPLE ("À");
cout<<"us.countChar32()="<<us.countChar32()<<endl;
for (int i=0; i<us.countChar32(); i++)
  cout<<(int)us.charAt(i)<<" ";

出力: us.countChar32()=2 195 8364

しかし、次の場合は別の答えになります: \u00C0 is À

cout<<"\nChar print out for \\u00C0"<<endl;
us = UNICODE_STRING_SIMPLE ("\u00C0");
cout<<"us.countChar32()="<<us.countChar32()<<endl;
for (int i=0; i<us.countChar32(); i++)
  cout<<(int)us.charAt(i)<<" ";

ここでの出力は次のとおりです: us.length()=1 192

違いの理由を説明できる人はいますか?

ustream.h を使用してファイルに書き込みました。

testFile<<"5:"<< UNICODE_STRING_SIMPLE ("À"); // needs ustream.h
testFile<<endl;
testFile<<"6:"<< UNICODE_STRING_SIMPLE ("\u00C0"); // needs ustream.h
testFile<<endl;

testFile はオブストリームです。開くと、5:À と表示されますが、6 は間違っています: 6:。Visual Studio でテキスト ファイルを開くと、VS が表示した実際の文字です。

4

1 に答える 1

0

とはSCAUString?

(\u単一のバックスラッシュ) は、コンパイラによって解釈されます。おそらくコンパイラは、ターゲットのコードページが ICU が期待するものと同じであるとは考えていないのでしょうか?

これを試して:

printf("%x or %x?\n", (int)'À', (int)'\u00C0');

于 2013-04-26T01:05:41.777 に答える