0

UTF-8 文字で構成される入力をトークン化しようとしています。一部の人がutf8の学習を試みている間、理解できない出力が得られます。characher π (pi) を入力すると、3 つの異なる数字 207 128 10 が得られます。それらを使用して、どのカテゴリに属する​​かを制御するにはどうすればよいですか?

ostringstream oss;
oss << cin.rdbuf();

string input = oss.str();
for(int i=0; i<input.size(); i++)
{
    unsigned char code_unit = input[i];
    cout << (int)code_unit << endl;
}

前もって感謝します。

4

1 に答える 1

3

UTF-8 でエンコードされた文字は、1 バイト以上を占める場合があります (多くの場合、そうです)。1 つのコード ポイントをエンコードするために使用されるバイト数は、1 バイトから 6 バイト (またはRFC 3629 では4 バイト) までさまざまです。π の場合、バイナリの UTF-8 エンコーディングは次のとおりです。

11001111 10000000

つまり、2 バイトです。これらのバイトを個別に読み込んでいます。最初のバイトは 10 進値 207 で、2 番目のバイトは 10 進値 128 です (符号なし整数として解釈する場合)。あなたが読んでいる次のバイトは10進数の値10を持ち、Enterキーを押したときに与えている改行文字です。

これらの UTF-8 文字を処理する場合は、バイトの意味を解釈する必要があります。正確に何をする必要があるかは、キャラクターをどのように分類しているかによって異なります。

于 2013-02-24T11:20:57.390 に答える