这是我的代码:
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 :
你
好
啊
哈
哈
无论如何都要跳过空格或数字,谢谢?
答案 0 :(得分:2)
UTF8-CPP只不过是一种用于将字符串编码和解码为UTF-8的工具。 Unicode代码点的分类是以及在该工具范围之外。你需要使用像Boost.Locale或ICU这样的认真的本地化工具。
答案 1 :(得分:-1)
UTF-8在以下意义上是“ASCII兼容的”:
如果编码字符串的一个字节等于ASCII值 - 例如空格,换行符或数字0-9,这意味着它不是编码序列的一部分,而不是一个字节。实际上这就是这个角色。
这意味着你可以对UTF8字符串中的一个字节执行isdigit(),就好像它是一个ASCII字符串一样,并保证它能正常工作。
有关详情,请参阅http://utf8everywhere.org搜索部分。