首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展“isalnum”以识别UTF-8

扩展“isalnum”以识别UTF-8
EN

Stack Overflow用户
提问于 2011-10-11 13:27:39
回答 3查看 2.4K关注 0票数 2

我编写了一个函数,它扩展了isalnum来识别UTF-8编码的umlaut。

有没有更好的方法来解决这个问题?

守则如下:

代码语言:javascript
复制
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;
    }
}

编辑:

我现在对我的解决方案进行了几次测试,它似乎是为了我的目的而做的。有强烈反对意见吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-11 13:39:07

你的代码不符合你的要求。

Ä的utf-8表示为两个字节- 0xC3,0x84.在utf-8中,一个值高于0x7F的单独字节是没有意义的。

一些一般性建议:

  • Unicode很大。考虑使用一个已经处理了您所看到的问题的库,例如ICU
  • 函数在单个代码单元或代码点上操作通常是没有意义的。拥有在代码点范围或单个符号上操作的函数更有意义(有关这些术语的定义,请参见这里 )。
  • 对于像通用字符集这样大的字符集,您的α-数字概念可能会被低估;是否将西里尔字母中的字符视为字母数字?Unicode关于什么是字母的概念可能与您的不匹配--特别是如果您还没有考虑过的话。
票数 5
EN

Stack Overflow用户

发布于 2011-10-11 13:33:59

我不是百分之百确定,但是C++ std::isalnum in <locale>几乎肯定会识别特定于地区的附加字符:http://www.cplusplus.com/reference/std/locale/isalnum/

票数 1
EN

Stack Overflow用户

发布于 2011-10-11 13:36:40

使用您定义的接口是不可能的,因为UTF-8是一个多字节编码;单个字符需要多个char来表示它。(我有确定UTF-8是否是库中指定字符集的成员的代码,但该字符是由一对迭代器指定的,而不是单个char。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7726777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档