我编写了一个函数,它扩展了isalnum来识别UTF-8编码的umlaut。
有没有更好的方法来解决这个问题?
守则如下:
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;
}
}编辑:
我现在对我的解决方案进行了几次测试,它似乎是为了我的目的而做的。有强烈反对意见吗?
发布于 2011-10-11 13:39:07
你的代码不符合你的要求。
Ä的utf-8表示为两个字节- 0xC3,0x84.在utf-8中,一个值高于0x7F的单独字节是没有意义的。
一些一般性建议:
发布于 2011-10-11 13:33:59
我不是百分之百确定,但是C++ std::isalnum in <locale>几乎肯定会识别特定于地区的附加字符:http://www.cplusplus.com/reference/std/locale/isalnum/
发布于 2011-10-11 13:36:40
使用您定义的接口是不可能的,因为UTF-8是一个多字节编码;单个字符需要多个char来表示它。(我有确定UTF-8是否是库中指定字符集的成员的代码,但该字符是由一对迭代器指定的,而不是单个char。)
https://stackoverflow.com/questions/7726777
复制相似问题