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将是一个明显的高估。
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是最常见的正确答案,因此我们正确了。但是,里程可能会有所不同。
TA贡献1777条经验 获得超10个赞
没有分配超过10FFFF(刚好超过一百万)限制的代码点,并且许多UTF8实现从未实现超过4个字节的序列(并且只有3个,例如MySQL),所以我认为将每个限制硬限制为4个字节是安全的即使考虑与较早实现的兼容性,也可以使用codepoint。您只需要确保在途中丢弃任何无效的东西即可。请注意,在可能的情况下,matiu建议在计算出精确的字节长度后进行分配。
添加回答
举报