为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

一个UTF-8编码字符的最大字节数是多少?我将加密以UTF-8编码的字符串的字节,因此需要能够计算出以UTF-8编码的字符串的最大字节数。有人可以确认单个UTF-8编码字符的最大字节数吗?
查看完整描述

3 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

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


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


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


代码少于128个字符的字符仅需要1个字节,接下来的1920个字符代码仅需要2个字节。除非您使用的是深奥的语言,否则将字符数乘以4将是一个明显的高估。


查看完整回答
反对 回复 2019-10-10
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

如果没有进一步的上下文,我想说的是,UTF-8中字符的最大字节数为


答案:6个字节


接受的答案的作者正确地指出这是“原始规范”。这通过RFC-2279 1是有效的。正如J. Cocoe在下面的评论中指出的那样,此情况在2003年通过RFC-3629 2进行了更改,RFC-3629 2将UTF-8的编码范围限制为21位,可以使用四个字节的编码方案进行处理。


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


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


如果仅代表原始unicode,则回答BMP:3个字节


但是,OP谈论的是另辟going径。不是从字符到UTF-8字节,而是从UTF-8字节到字节表示的“字符串”。也许接受的答案的作者是从问题的上下文中得出的,但这不一定是显而易见的,因此可能使对此问题的普通读者感到困惑。


从UTF-8到本地编码,我们必须研究如何实现“字符串”。某些语言(例如Python> = 3)将使用整数代码点表示每个字符,这会导致每个字符4个字节= 32位,以覆盖我们需要的unicode所需要的21位,但有些浪费。为什么不完全是21位?因为字节对齐时事情会更快。诸如Python <= 2和Java之类的某些语言使用UTF-16编码表示字符,这意味着它们必须使用代理对来表示扩展的Unicode(不是BMP)。无论哪种方式,最大长度仍为4个字节。


如果要使用UTF-8,请回答->本机编码:4个字节


因此,最终结论4是最常见的正确答案,因此我们正确了。但是,里程可能会有所不同。


查看完整回答
反对 回复 2019-10-10
?
不负相思意

TA贡献1777条经验 获得超10个赞

没有分配超过10FFFF(刚好超过一百万)限制的代码点,并且许多UTF8实现从未实现超过4个字节的序列(并且只有3个,例如MySQL),所以我认为将每个限制硬限制为4个字节是安全的即使考虑与较早实现的兼容性,也可以使用codepoint。您只需要确保在途中丢弃任何无效的东西即可。请注意,在可能的情况下,matiu建议在计算出精确的字节长度后进行分配。

查看完整回答
反对 回复 2019-10-10
  • 3 回答
  • 0 关注
  • 2089 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信