这与以下问题有关:
如果我们想要将二进制数据表示为可打印字符,我们可以使用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个可打印字符的编码?
发布于 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低。这可能就是它没有被标准化的原因。
发布于 2021-02-02 22:20:14
因为它没有用。
要编码12位(只是一个从0到0x7FF的码点序列),您需要2个字节的UTF-8格式。
但在BASE64中,你也需要2个字节,而且简单得多。
对于16位,您可以使用3字节。Base64可以将18位编码为3个字节。
所以:更复杂,效率更低。
但这也会更加困难。正确的Unicode文本具有受限的Unicode序列:组合字符位置。此类组合字符的数量。不应该使用某些代码点(或者仅在内部使用,或者从不使用)。
https://stackoverflow.com/questions/66010584
复制相似问题