|
阅读 locale 相关知识的时候知道,ctypes.h 中的各种函数都是可以正确识别 locale 的。例如 isalpha。
但是实际应用中我发现 isalpha , isalnum, isgraph 对所有汉字字符均返回假。
于是我查阅了 libc 源代码,最后发现是读取的本机 locale 信息,然后再看该信息,发现中文 locale 的 lc_ctype 已经包含了 i18n,如果仔细阅读 i18n 里面关于 lc_ctype 的定义的话,会发现这里面已经非常完整的定义了所有的 unicode 字符的类别。理论上,是可以正常识别 alpha, graph, upper, lower 等类型判断的。
当然,如果只传一个单字节字符参数给 isalpha 确实不可能获取整个 unicode 代码,那么究竟是如何处理的呢?这块代码宏太多,又涉及到 tsd 那个跨线程库,实在不容易弄懂,看起来固定是读入到某个数组,然而这个数组是怎么生成的,一直没有看懂。我已经 setlocale 到中国了,应该会让 isalpha 返回真才对,是不是呢? |
|