0

これは私のコードです:

std::vector<std::string> InverseIndex::getWords(std::string line)
{
  std::vector<std::string> words;

  char* str = (char*)line.c_str();
  char* end = str + strlen(str) + 1;
  unsigned char symbol[5] = {0,0,0,0,0};

  while( str < end ){
    utf8::uint32_t code = utf8::next(str, end);
    if(code == 0) continue;
    utf8::append(code, symbol);
    // TODO detect white spaces or numbers.
    std::string word = (const char*)symbol;
    words.push_back(word);
  }

  return words;
}

Input : "你 好 啊 哈哈 1234"

Output : 
你
??
好
 ??
啊
 ??
哈
哈
 ??
1??
2??
3??
4??

Expected output : 
你
好
啊
哈
哈

とにかく空白や数字をスキップすることはありますか、ありがとう。

4

2 に答える 2

2

UTF8-CPP は、文字列を UTF-8 に/からエンコードおよびデコードするためのツールにすぎません。Unicode コードポイントの分類は、そのツールの範囲外ですそのためには、Boost.Locale や ICU などの本格的なローカリゼーション ツールを使用する必要があります。

于 2013-03-23T15:05:06.650 に答える
-1

UTF-8 は、次の意味で「ASCII 互換」です。

エンコードされた文字列のバイトの 1 つが ASCII 値 (スペース、改行、または 0 ~ 9 の数字など) と等しい場合、これは、1 バイトより長いエンコードされたシーケンスの一部ではないことを意味します。それは実際にはまさにこのキャラクターです。

つまり、ASCII 文字列であるかのように、UTF8 文字列のバイトに対して isdigit() を実行でき、正しく動作することが保証されます。

詳細については、 http: //utf8everywhere.org検索に関するセクションを参照してください。

于 2013-03-24T14:34:55.413 に答える