2013-03-23 54 views
0

這是我的代碼:如何在使用UTF8CPP時檢測空白或數字?

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

反正是有跳過空格或數字,謝謝?

+1

這超出了UTF8CPP的範圍 – 2013-03-23 14:46:50

回答

2

UTF8-CPP不過是一個將字符串編碼和解碼爲UTF-8的工具。 Unicode代碼點的分類是以及超出該工具的範圍。您需要使用像Boost.Locale或ICU這樣的嚴肅的本地化工具。

-1

UTF-8是在以下的意義上的「ASCII兼容」:

如果編碼串的字節之一等於ASCII值 - 如空間,新的線,或者數字0-9,這意味着它不是長於一個字節的編碼序列的一部分。它其實就是這個角色。

這意味着,您可以對UTF8字符串中的一個字節執行isdigit(),就像它是一個ASCII字符串一樣,並且保證能正常工作。

欲瞭解更多信息,請參閱http://utf8everywhere.org關於搜索的部分。