C ++ 11 - Unicode字符串 - 查找是否包含非基于ascii的字符

时间:2017-03-26 09:37:07

标签: c++11 unicode utf-8

我在UTF8类中表示的C ++ 11中有Unicode字符串。我可以获得Unicode字符数字。如果字符串包含不是基于ASCII的字符(使用变音符号),我该如何检查?

EG。我想检测日语,阿拉伯语,俄语等,但是对于特殊字符,例如德语ü,捷克语č,法语î等我想说,它是“像ASCII一样“

(我不想使用Boost)

1 个答案:

答案 0 :(得分:2)

我找到了一个解决方案,使用unicode string normalization并使用Unilib

我正在通过char迭代字符串char。我的UTF8字符串由TinyUTF8库表示(现在在github上维护)。

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
    }
}