【问题标题】:UTF-8 string size in bytesUTF-8 字符串大小(以字节为单位)
【发布时间】:2013-04-26 18:51:24
【问题描述】:

我需要确定 C 中 UTF-8 字符串的长度(以字节为单位)。如何正确执行?据我所知,在 UTF-8 中,终端符号的大小为 1 字节。我可以为此使用 strlen 函数吗?

【问题讨论】:

  • UTF-8 没有定义字符串的终止方式。使用空字符 '\0' 终止字符串是 C 约定。
  • UTF-8 的全部意义在于您不必更改任何字符串处理实践。只有解释字符串字符的代码才可能需要更改,即使这样,通常也只有当它对 ASCII 范围之外的字符应用特殊解释时。 strlenstrstrstrchr(用于搜索单字节字符)、snprintf 等都可以。
  • 感谢您的解释!

标签: c utf-8


【解决方案1】:

我可以使用 strlen 函数吗?

是的,strlen 给出了第一个 '\0' 字符之前的字节数,所以

strlen(utf8) + 1

utf8 中的字节数,包括 0 终止符,因为在 UTF-8 中除 '\0' 之外的任何字符都不包含 0 字节。

当然,这只有在 utf8 实际上是 UTF-8 编码时才有效,否则你需要先将其转换为 UTF-8。

【讨论】:

  • @JoopEggen:不,Latin-1 和高位控制字符在 UTF-8 中不是单字节的。 UTF-8 中的只有 个单字节字符是 ASCII。在任何情况下,编码都与以字节为单位测量字符串的大小无关。
  • @R.. 对;事实上,我只想提一下 UTF-8 的优点,即由于高位,无法在 UTF-8 多字节序列中错误地找到整个 7 位 ASCII 范围。
【解决方案2】:

是的,strlen() 会简单地计算字节数,直到遇到 NUL,它是 0 结尾的 UTF-8 编码的 C 字符串的正确终止符。

【讨论】:

    猜你喜欢
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 2015-09-01
    • 2012-01-20
    • 2012-02-01
    • 2011-11-26
    • 2011-09-08
    相关资源
    最近更新 更多