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 兼容的”:

如果编码字符串的一个字节等于 ASCII 值 - 例如空格、换行或数字 0-9,这意味着它不是长于一个字节的编码序列的一部分。其实就是这个性格。

这意味着,您可以对 UTF8 字符串中的一个字节执行 isdigit() 操作,就好像它是一个 ASCII 字符串一样,并且保证可以正常工作。

有关更多信息,请参阅http://utf8everywhere.org的搜索部分。

于 2013-03-24T14:34:55.413 回答