什么是UTF-8编码字符的最大字节数?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (141)

单个UTF-8编码字符的最大字节数是多少?

我将加密以UTF-8编码的字符串的字节,因此需要能够计算出UTF-8编码字符串的最大字节数。

提问于
用户回答回答于

根据RFC3629,每个字符的最大字节数为4,将字符表限制为U+10FFFF

在UTF-8中,来自U + 0000..U + 10FFFF范围(UTF-16可访问范围)的字符使用1到4个八位字节的序列进行编码。

(原始规范允许过去的代码点使用多达六个字节的字符代码U+10FFFF。)

代码少于128的字符只需要1个字节,接下来的1920个字符代码只需要2个字节。除非你使用一种深奥的语言,否则将字符数乘以4将会导致高估。

用户回答回答于

UTF-8中字符的最大字节数是6个字节

被接受的答案的作者正确地指出这是“原始规范”,但我认为这会误导读者,因为据我所知,这仍然是当前和正确的规格,根据维基百科和每本Google书籍Java中的UTF-8。

接受的答案中引用的RFC指出,只有四个字节与UTF-16编码相关,因此只有在添加上下文时才是正确的

如果只将字符从UTF-16转换为UTF-8:4字节,则应答

现在,所有可以用UTF-16表示的字符都有用吗?再次根据维基百科,unicode最多可以表示x10FFFF代码点。因此,包括0,这意味着我们可以用这些字节来完成:F FF FF,即2.5字节或20位。回顾一下UTF-8规范,我们看到我们可以用最多四个UTF-8编码字节表示20位。所以

如果覆盖所有unicode,则回答4个字节

但是,在Java <= v7中,他们谈论用UTF-8表示unicode的最大值为3个字节?这是因为原始的unicode规范仅定义了基本的多语言平面即它是unicode的较旧版本或现代unicode的子集。所以

回答如果只代表原始的Unicode,BMP:3个字节

但是,OP在谈论走向另一条路。不是从字符到UTF-8字节,而是从UTF-8字节到字节表示的“字符串”。也许被接受的答案的作者从问题的背景中得到了答案,但这不一定是明显的,所以可能会混淆这个问题的临时读者。

从UTF-8到本地编码,我们必须看看如何实现“字符串”。某些语言,如Python> = 3,将用整数代码点表示每个字符,这允许每个字符4个字节= 32位来覆盖我们需要的Unicode,这有些浪费。为什么不准确20位?因为字节对齐时事情会更快。Python <= 2和Java等一些语言使用UTF-16编码表示字符,这意味着它们必须使用代理对来表示扩展unicode(而不是BMP)。无论哪种方式,最多仍然是4个字节。

回答如果是UTF-8 - >本地编码:4字节

所以,最后的结论是,4是最常见的正确答案,所以我们说得对。但是,在某些情况下,你应该小心。例如,不要指望你可以表示你从UTF-8流中读取的最多4个字节的内容。如果它不是unicode,则可能需要多达6个字节。

所属标签

可能回答问题的人

  • 不吃貓的鱼oo

    5 粉丝466 提问6 回答
  • Richel

    8 粉丝0 提问4 回答
  • 发条丶魔灵1

    6 粉丝525 提问3 回答
  • 人生的旅途

    10 粉丝484 提问3 回答

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励