2017-03-26 229 views
0

我有UTF8類中表示的C++ 11中的Unicode字符串。我可以得到Unicode字符數字。如何檢查,如果字符串包含字符,不是基於ASCII(帶有變音符號)?C++ 11 - Unicode字符串 - 查找是否包含非ASCII字符

例如,我想檢測日語,阿拉伯語,俄語等,但對於特殊字符,如德國ü,捷克č,法國î等等。我想說,這是「ASCII像」

(我不想使用升壓)

+0

在UTF-8中,每個字符都由一個或多個8位字節編碼。純ASCII字符僅使用這8位中的7位進行編碼,這意味着您可以輕鬆識別它們,因爲它們的最高位始終爲零。如果你[讀取*關於UTF-8編碼的任何內容](https://en.wikipedia.org/wiki/UTF-8),這應該是非常清楚的。 –

+0

@Someprogrammerdude是的。我只會識別ASCII碼,但是非ASCII碼則是用變音符號派生的。 –

回答

0

我發現了一個解決方案,使用unicode string normalization並使用Unilib

我正在迭代char字符串。我的UTF8字符串用TinyUTF8庫表示。

utf8_string u8str = u8"\u4e0a\u6d77 Příliš žluťoučký kůň úpěl ďábelské ódy"; 

for (auto c : u8str){ 
    std::u32string uu; 
    uu.push_back(c);   
    ufal::unilib::uninorms::nfd(uu); 

    if (uu[0] < 128){ 
     //has ASCII base 
    } 
} 
相關問題