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

nwlls2ji  于 2021-07-09  发布在  Java
关注(0)|答案(3)|浏览(803)

单个utf-8编码字符的最大字节数是多少?
我将对utf-8编码的字符串的字节进行加密,因此需要能够计算出utf-8编码字符串的最大字节数。
有人能确认一个utf-8编码字符的最大字节数吗

pdkcd3nj

pdkcd3nj1#

如果没有进一步的上下文,我会说utf-8中字符的最大字节数是
答案:6字节
公认答案的作者正确地指出这是“原始规范”。通过rfc-22791有效。作为j。cocoe在下面的评论中指出,2003年rfc-36292改变了这一点,rfc-36292将utf-8限制为21位编码,这可以通过使用4个字节的编码方案来处理。
回答是否覆盖所有unicode:4字节
但是,在java<=v7中,他们讨论了用utf-8表示unicode的最大3字节数?这是因为最初的unicode规范只定义了基本的多语言平面(bmp),也就是说,它是unicode的旧版本,或者是现代unicode的子集。所以
如果只表示原始unicode,则回答bmp:3字节
但是,行动计划说要走另一条路。不是从字符到utf-8字节,而是从utf-8字节到字节表示的“字符串”。也许被接受的答案的作者是从问题的上下文中得到的,但这并不一定是显而易见的,因此可能会使这个问题的普通读者感到困惑。
从utf-8到本机编码,我们必须看看“string”是如何实现的。有些语言,如python>=3,将用整数代码点表示每个字符,这允许每个字符4个字节=32位来覆盖unicode所需的21个字节,但有些浪费。为什么不是21位呢?因为当它们是字节对齐的时候速度更快。有些语言(如python<=2和java)使用utf-16编码来表示字符,这意味着它们必须使用代理项对来表示扩展unicode(而不是bmp)。不管是哪种方式,最多还是4字节。
回答如果去utf-8->本机编码:4字节
所以,最后的结论,4是最常见的正确答案,所以我们得到了正确的答案。但是,里程数可能会有所不同。

vs3odd8k

vs3odd8k2#

支持us ascii(标准英文字母编码)的最大字节数为1。但随着时间的推移,将文本限制为英语变得越来越不可取或不实用。
unicode被设计用来表示所有人类语言的字形,以及多种符号,具有各种呈现特征。utf-8是unicode的一种有效编码,尽管仍然偏向于英语。utf-8是自同步的:通过在任意方向上扫描定义良好的位模式,可以很容易地识别字符边界。
虽然每个utf-8字符的最大字节数是3,仅支持平面0(基本多语言平面(bmp)的2字节地址空间,这在某些应用程序中可以被接受为最小支持,但支持所有17个当前unicode平面(截至2019年)的最大字节数是4。需要注意的是,许多流行的“emoji”字符可能位于需要4字节的平面16中。
但是,这只是基本的字符图示符。还有各种各样的修饰语,例如使重音出现在前面的字符上,还可以将任意数量的代码点连接在一起,以构造一个复杂的“grapheme”。因此,在实际编程中,使用或假设每个字符的最大字节数是固定的,最终可能会导致应用程序出现问题。
这些考虑意味着utf-8字符串在处理之前不应该“扩展”成固定长度的数组,就像有时所做的那样。相反,编程应该直接完成,使用专门为utf-8设计的字符串函数。

k4aesqcs

k4aesqcs3#

根据rfc3629,每个字符的最大字节数为4,该rfc3629将字符表限制为 U+10FFFF :
在utf-8中,u+0000..u+10ffff范围(utf-16可访问范围)中的字符使用1到4个八位字节的序列进行编码。
(原始规范允许对过去的代码点使用最多6个字节的字符代码 U+10FFFF .)
代码小于128的字符只需要1个字节,接下来的1920个字符代码只需要2个字节。除非您使用的是一种深奥的语言,否则将字符数乘以4将是一种明显的高估。

相关问题