我对UTF8有基本的理解:代码点的长度是可变的,所以一个“字符”可以是8位、16位,甚至更长。
我想知道的是,在C语言中是否有一些示例代码、库等可以做类似于UTF8字符串的事情,例如,告诉字符串的长度等。
谢谢,
发布于 2012-06-10 10:06:28
GNU确实有一个名为的Unicode字符串库,但它处理任何东西都不如ICU的好。
例如,GNU库甚至不允许您访问排序规则,而排序规则是所有字符串比较的基础。相比之下,ICU有。ICU还有一个GNU没有的特性,那就是Unicode正则表达式。为此,您可能希望使用Phil Hazel’s excellent PCRE library for C,它可以使用UTF8支持进行编译。
但是,GNU库可能足以满足您的需求。我不太喜欢它的API。非常凌乱。如果你喜欢C编程,你可以试试Go programming language,它有很好的Unicode支持。这是一门新的语言,但它很小,很干净,而且使用起来很有趣。
另一方面,主要的解释语言- Perl、Python和Ruby -都对Unicode提供了不同程度的支持,这比您在C中得到的支持要好得多。
记住:仅仅支持更多的字符是不够的。如果没有相应的规则,就没有Unicode。至多,您可能有ISO 10646:一个很大的字符集,但没有规则。我的信条是“Unicode不仅仅是更多的字符;它是更多的字符加上一大堆处理这些字符的规则。”
发布于 2012-06-08 19:58:27
处理Unicode的最重要的库是IBM's ICU。
但是,如果您所需要做的就是确定UTF8编码字符串中的代码点的数量,那么可以使用介于\x01
和\x7F
之间或\xC2
和\xFF
之间的值来计算字符的数量。
发布于 2018-04-29 07:31:24
如果您对不分配内存并使用堆栈的库感兴趣,可以尝试使用utf8rewind。
https://stackoverflow.com/questions/10948234
复制相似问题