Edd*_*Edd 75 byte character utf-8 character-encoding
单个UTF-8编码字符的最大字节数是多少?
我将加密以UTF-8编码的字符串的字节,因此需要能够计算出UTF-8编码字符串的最大字节数.
有人可以确认单个UTF-8编码字符的最大字节数
Tam*_*más 80
根据RFC3629,每个字符的最大字节数为4,将字符表限制为U+10FFFF:
在UTF-8中,使用1到4个八位字节的序列对来自U + 0000..U + 10FFFF范围(UTF-16可访问范围)的字符进行编码.
(原始规范允许代码点过去最多六个字节的字符代码U+10FFFF.)
代码小于128的字符只需要1个字节,接下来的1920个字符代码只需要2个字节.除非您使用深奥的语言,否则将字符数乘以4将是一个重要的高估.
Jos*_*son 30
如果没有进一步的上下文,我会说UTF-8中字符的最大字节数是
回答:6个字节
接受的答案的作者正确地指出这是"原始规范",但我认为这误导了读者,因为据我所知,这仍然是当前和正确的规范,每个维基百科,并根据谷歌的书Java中的UTF-8.
在接受的答案中引用的RFC表明只有四个字节与UTF-16编码相关,所以只有在我们添加上下文时这才是正确的
如果仅将字符从UTF-16转换为UTF-8:4个字节,则回答
现在,UTF-16可以表示的所有字符都有用吗?再次根据维基百科,unicode可以代表高达x10FFFF的代码点.因此,包括0,这意味着我们可以用这些字节做到这一点:F FF FF,即两个和一个半字节或20位.回顾UTF-8规范,我们看到我们可以用最多四个UTF-8编码的字节表示20位.所以
如果覆盖所有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所需的20个字符,但有些浪费.为什么不完全是20位?因为字节对齐时事情会更快.Python <= 2和Java等某些语言使用UTF-16编码表示字符,这意味着它们必须使用代理项对来表示扩展的unicode(而不是BMP).无论哪种方式,最多仍然是4个字节.
回答如果去UTF-8 - >本机编码:4个字节
所以,最后的结论,4是最常见的正确答案,所以我们做对了.但是,在某些情况下你应该小心.例如,不要指望您可以用最多4个字节表示从UTF-8流中读取的任何内容.如果它不是unicode,则最多可能需要6个字节.
| 归档时间: |
|
| 查看次数: |
48839 次 |
| 最近记录: |