使用UTF8CPP时如何检测空格或数字?

时间:2013-03-23 14:44:45

标签: c++ unicode

这是我的代码:

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 : 
你
好
啊
哈
哈

无论如何都要跳过空格或数字,谢谢?

2 个答案:

答案 0 :(得分:2)

UTF8-CPP只不过是一种用于将字符串编码和解码为UTF-8的工具。 Unicode代码点的分类是以及在该工具范围之外。你需要使用像Boost.Locale或ICU这样的认真的本地化工具。

答案 1 :(得分:-1)

UTF-8在以下意义上是“ASCII兼容的”:

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

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

有关详情,请参阅http://utf8everywhere.org搜索部分。