一个UTF-8编码字符的最大字节数是多少?
我将对以UTF-8编码的String的字节进行加密,因此需要能够计算出UTF-8编码的String的最大字节数。
有人可以确认单个UTF-8编码字符的最大字节数吗?
一个UTF-8编码字符的最大字节数是多少?
我将对以UTF-8编码的String的字节进行加密,因此需要能够计算出UTF-8编码的String的最大字节数。
有人可以确认单个UTF-8编码字符的最大字节数吗?
Answers:
根据RFC3629,每个字符的最大字节数为4,该字符将字符表限制为U+10FFFF
:
在UTF-8中,使用1到4个八位字节的序列对U + 0000..U + 10FFFF范围(UTF-16可访问范围)中的字符进行编码。
(原始规范允许对过去的代码点最多使用六个字节的字符代码U+10FFFF
。)
代码小于128的字符仅需要1个字节,接下来的1920个字符代码仅需要2个字节。除非您使用的是深奥的语言,否则将字符数乘以4将是一个明显的高估。
11111111
和2^(6*7)
位空间?
没有进一步的上下文,我想说的是,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谈论的是另一种方式。不是从字符到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是最常见的正确答案,所以我们说对了。但是,里程可能会有所不同。
支持US-ASCII(标准英语字母编码)的最大字节数为1。但是随着时间的流逝,将文本限制为英语变得越来越不可取或不切实际。
Unicode旨在代表所有人类语言的标志符号以及多种具有各种渲染特征的符号。UTF-8是一种有效的Unicode编码,尽管它仍然偏向英语。UTF-8是自同步的:通过在任一方向上扫描定义明确的位模式,可以轻松识别字符边界。
虽然每个UTF-8字符的最大字节数是3,以仅支持平面0(基本多语言平面(BMP))的2字节地址空间,在某些应用程序中它可以被接受为最低限度的支持,但它是4,则仅用于支持Unicode的所有当前17个平面(截至2019年)。应当注意,许多流行的“表情符号”字符很可能位于16平面中,这需要4个字节。
但是,这仅适用于基本字符字形。还有各种修饰符,例如使重音符号出现在前一个字符上,并且还可以将任意数量的代码点链接在一起以构造一个复杂的“字形”。因此,在现实世界的编程中,每个字符使用或假设使用固定的最大字节数最终可能会给您的应用程序带来麻烦。
这些考虑意味着UTF-8字符串在处理之前不应该“扩展”为固定长度的数组,这有时是可以做到的。相反,应使用专门为UTF-8设计的字符串函数直接进行编程。