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

UTF-8编码字符的最大字节数是多少?,utf-8,character-encoding,byte,character,Utf 8,Character Encoding,Byte,Character,单个UTF-8编码字符的最大字节数是多少 我将加密UTF-8编码字符串的字节,因此需要能够计算出UTF-8编码字符串的最大字节数 是否有人可以确认单个UTF-8编码字符的最大字节数请每个字符的最大字节数为4,根据这一点,字符表限制为U+10FFFF: 在UTF-8中,U+0000..U+10FFFF范围(UTF-16)中的字符 可访问范围)使用1到4个八位字节的序列进行编码 (原始规范允许超过U+10FFFF的代码点最多使用六字节字符代码) 代码小于128的字符只需要1个字节,接下来的1920个

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

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


是否有人可以确认单个UTF-8编码字符的最大字节数请

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

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

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


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

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

回答:6字节

公认答案的作者正确地指出这是“原始规范”。这通过RFC-2279是有效的。正如J.Cocoe在下面的评论中指出的,这一点在2003年RFC-3629中有所改变,RFC-3629将UTF-8的编码限制为21位,可以使用4个字节的编码方案来处理

回答是否覆盖所有unicode:4字节

但是,在中),即它是unicode的旧版本,或现代unicode的子集。所以

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

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


从UTF-8到本机编码,我们必须了解“字符串”是如何实现的。有些语言,如Python>=3,将用整数代码点表示每个字符,这允许每个字符4个字节=32位来覆盖unicode所需的21个字节,但有些浪费。为什么不确切地说是21位呢?因为当字节对齐时,事情会更快。一些语言,如Python支持US-ASCII(标准英文字母编码)的最大字节数为1。但随着时间的推移,将文本限制为英语变得越来越不可取或不实用

Unicode设计用于表示所有人类语言的字形,以及多种符号,具有各种呈现特征。UTF-8是一种有效的Unicode编码,尽管仍然偏向于英语。UTF-8是自同步的:通过在任意方向上扫描定义良好的位模式,可以很容易地识别字符边界

虽然每个UTF-8字符的最大字节数为3,仅支持平面0(基本多语言平面(BMP))的2字节地址空间,这在某些应用程序中可以接受为最小支持,但支持所有17个当前Unicode平面(截至2019年)的最大字节数为4。需要注意的是,许多流行的“表情符号”字符可能位于平面16中,该平面需要4个字节

但是,这仅适用于基本字符图示符。还有各种修改器,例如使重音出现在前一个字符上,还可以将任意数量的代码点链接在一起以构造一个复杂的“字形”。因此,在现实编程中,使用或假设每个字符的最大字节数是固定的,最终可能会导致应用程序出现问题


这些考虑意味着UTF-8字符串在处理之前不应“扩展”为固定长度的数组,有时也会这样做。相反,编程应该直接完成,使用专门为UTF-8设计的字符串函数。

您确实看过常见资源,例如,first。。。是吗?我读了几篇文章,给出了复杂的答案。。。事实上,我得到的印象是答案是3,所以我很高兴我问Kedi会在这里留下一个youtube链接,以Tom Scott的角色、符号和Unicode奇迹为特色:。您可以听到并看到所有内容是如何从ASCII字符编码发展到utf-8的。另请参见长度计算代码示例“esotheric语言”对您来说是什么?现实世界中存在的任何语言,或在世界不同语言之间切换的文本?UTF-8-to-String函数的开发人员是否应该选择2、3或4作为乘法器,如果他进行了过度分配,并在实际转换后缩小了结果?@rinntech的“深奥语言”指的是一种具有大量高值unicode字符的语言(此列表底部附近的内容:)。如果您必须超额分配,请选择4。您可以进行双重传递,一个用来查看需要和分配多少字节,然后另一个用来进行编码;这可能比分配约4倍所需的RAM要好。始终尝试处理最坏的情况:大部分占用3字节(一些稀有/古老字符占用4字节),将它们称为深奥有点牵强(仅中国就几乎占世界人口的20%)。为什么在以前是6时限制为4?是什么阻止了我们继续使用该标准,使前导字节
11111111
和字符的
2^(6*7)
位空间?“根据维基百科,这仍然是当前正确的规范”——不再是了。在您写了这篇文章(4月2日编辑)后不久,Wikipedia的UTF-8文章被修改,以澄清6-octet版本不是当前(2003年)UTF-8规范的一部分。“但是,在Java中,没有分配超过10FFFF(略超过一百万)限制的代码点,许多UTF8实现都没有