【发布时间】:2012-06-12 11:26:41
【问题描述】:
我对 UTF8 有基本的了解:码位具有可变长度,因此“字符”可以是 8 位、16 位,甚至更长。
我想知道的是,C 语言中是否有一些示例代码、库等与 UTF8 字符串类似,例如 C 中的标准库。告诉字符串的长度等。
谢谢,
【问题讨论】:
-
请记住,例如strlen() 在 utf-8 编码数据上效果很好,它为您提供了 uft-8 字符串的长度。但是,它不会为您提供该字符串中的 unicode 字符数。
-
@nos 这是错误的,在几个方面。当然,如果字符串中有 U+0000 个码位,
strlen根本不起作用,这是完全合法的。说它告诉字符串的“长度”是不诚实的。它没有。它只告诉您字节数,而不是您想要的代码点数。 -
@tchrist 请记住,我们在这里讨论的是 UTF-8 编码的字符串。在 C 代码中,UTF-8 字符串在您遇到空字节时结束。 UTF-8 字符串的长度可能是也可能不是您想要的。例如如果要将字符串复制到新缓冲区中,或者需要确定字符串是否适合有限长度的数据库字段,则确实需要字节数。
-
@tchrist
strlen也不适用于包含 ASCII 代码 NUL 的 ASCII 字符串。但是我们不会到处说它不适用于 ASCII 字符串,对吗?