0
我有UTF8類中表示的C++ 11中的Unicode字符串。我可以得到Unicode字符數字。如何檢查,如果字符串包含字符,不是基於ASCII(帶有變音符號)?C++ 11 - Unicode字符串 - 查找是否包含非ASCII字符
例如,我想檢測日語,阿拉伯語,俄語等,但對於特殊字符,如德國ü
,捷克č
,法國î
等等。我想說,這是「ASCII像」
(我不想使用升壓)
我有UTF8類中表示的C++ 11中的Unicode字符串。我可以得到Unicode字符數字。如何檢查,如果字符串包含字符,不是基於ASCII(帶有變音符號)?C++ 11 - Unicode字符串 - 查找是否包含非ASCII字符
例如,我想檢測日語,阿拉伯語,俄語等,但對於特殊字符,如德國ü
,捷克č
,法國î
等等。我想說,這是「ASCII像」
(我不想使用升壓)
我發現了一個解決方案,使用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
}
}
在UTF-8中,每個字符都由一個或多個8位字節編碼。純ASCII字符僅使用這8位中的7位進行編碼,這意味着您可以輕鬆識別它們,因爲它們的最高位始終爲零。如果你[讀取*關於UTF-8編碼的任何內容](https://en.wikipedia.org/wiki/UTF-8),這應該是非常清楚的。 –
@Someprogrammerdude是的。我只會識別ASCII碼,但是非ASCII碼則是用變音符號派生的。 –