我编写了一个扩展isalnum
以识别UTF-8编码变音符号的函数。
是否有更优雅的方法可以解决这个问题?
代码如下:
bool isalnumlaut(const char character) {
int cr = (int) (unsigned char) character;
if (isalnum(character)
|| cr == 195 // UTF-8
|| cr == 132 // Ä
|| cr == 164 // ä
|| cr == 150 // Ö
|| cr == 182 // ö
|| cr == 156 // Ü
|| cr == 188 // ü
|| cr == 159 // ß
) {
return true;
} else {
return false;
}
}
修改
我现在多次测试我的解决方案,但它似乎为我的目的做了工作。有强烈的反对意见吗?
答案 0 :(得分:5)
您的代码不符合您的要求。
Ä
的utf-8表示是两个字节 - 0xC3,0x84
。在utf-8中,值大于0x7F
的单个字节无意义。
一些一般性建议:
答案 1 :(得分:1)
我不是100%肯定,但std::isalnum
中的C ++ <locale>
几乎肯定会识别特定于语言环境的其他字符:http://www.cplusplus.com/reference/std/locale/isalnum/
答案 2 :(得分:1)
使用您定义的界面是不可能的,因为UTF-8是一个
多字节编码;单个字符需要多个char
代表它。 (我有用于确定UTF-8是否为a的代码
我的库中指定字符集的成员,但是
character由一对迭代器指定,而不是一个char
。)