首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一些标准编码可以将二进制数据编码为每个数据字节一个UTF-8可表示unicode字符的序列?

是否有一些标准编码可以将二进制数据编码为每个数据字节一个UTF-8可表示unicode字符的序列?
EN

Stack Overflow用户
提问于 2021-02-02 21:21:04
回答 2查看 68关注 0票数 0

这与以下问题有关:

Why is base128 not used?

如果我们想要将二进制数据表示为可打印字符,我们可以使用ASCII码集中的16个可打印“数字”对其进行十六进制编码(每个数据字节产生2个数字),或者我们可以使用ASCII码集中的64个可打印字符进行base64编码(每个数据字节产生大约1.33个字符)

没有使用ASCII码的base128编码,因为ASCII码只包含95个可打印字符(虽然有Ascii85,它使用85个字符的https://en.wikipedia.org/wiki/Ascii85)

我想知道的是,是否有任何标准化的表示法可以选择256个可打印的unicode字符,这些字符可以用UTF-8表示,从而有效地产生每个数据字节具有1个可打印字符的编码?

EN

回答 2

Stack Overflow用户

发布于 2021-02-02 22:15:21

没有这样的标准编码。但是可以很容易地创建它。选择256个随机Unicode字符,并使用它们对字节0到255进行编码。

有些字符需要2个或更多字节才能以UTF-8编码,因为只有94个可打印字符采用1字节编码。

使用这种方法可以实现的最紧凑的编码是将这94个字符(U+0021到U+007E)添加162个需要2字节编码的可打印字符,例如U+00A1到U+0142。它导致每个输入字节需要大约1.63个输出字节的编码。所以它的效率比Base64低。这可能就是它没有被标准化的原因。

票数 1
EN

Stack Overflow用户

发布于 2021-02-02 22:20:14

因为它没有用。

要编码12位(只是一个从0到0x7FF的码点序列),您需要2个字节的UTF-8格式。

但在BASE64中,你也需要2个字节,而且简单得多。

对于16位,您可以使用3字节。Base64可以将18位编码为3个字节。

所以:更复杂,效率更低。

但这也会更加困难。正确的Unicode文本具有受限的Unicode序列:组合字符位置。此类组合字符的数量。不应该使用某些代码点(或者仅在内部使用,或者从不使用)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66010584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档