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

是否有一些标准编码将二进制数据编码为每字节数据一个UTF-8可表示unicode字符的序列?,unicode,base64,ascii,Unicode,Base64,Ascii,这与以下问题有关: 如果我们想将二进制数据表示为可打印字符,我们可以使用ASCII集合中16个可打印“数字”的集合对其进行十六进制编码(每字节数据产生2个数字),或者我们可以使用ASCII集合中64个可打印字符的集合进行base64编码(每字节数据产生大约1.33个字符) 没有使用ASCII字符的base128编码,因为ASCII仅包含95个可打印字符(尽管有使用85个字符的Ascii85) 我想知道的是,是否有任何标准化的表示方法使用256个可打印的unicode字符,这些字符可以用UTF-

这与以下问题有关:

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

没有使用ASCII字符的base128编码,因为ASCII仅包含95个可打印字符(尽管有使用85个字符的Ascii85)


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

没有这样的标准编码方法。但它很容易被创造出来。选择256个随机Unicode字符,并使用它们对字节0到255进行编码

一些字符需要2个或更多字节才能在UTF-8中编码,因为只有94个可打印字符具有1字节编码


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

因为它没有用处

要编码12位(仅从0到0x7FF的码点序列),需要UTF-8中的2个字节

但在BASE64中,还需要2个字节,这要简单得多

对于16位,可以使用3个字节。Base64可以在3个字节中编码18位

所以:更复杂,效率更低


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

当然它很有用,因为它在视觉上较短(bas64编码数据的二进制表示也比源数据大)。这种表示的好处不是存储效率,而是更短、可打印的表示。很明显,有些代码点有缺陷,但这种编码不会使用这些代码点。。你遇到了一个难题。拉丁文大写字母A类似于希腊语大写字母Alpha和西里尔语大写字母A。有些字符需要更多的水平空间,有些字符也需要更多的垂直空间。如果你找到了一个用途,你可以很容易地创建一个。也许只是拉丁字母(小写和大写),你可以在任何字符中添加3或4个重音(可能更多),这样你就可以得到更多的信息。可能只需要一个i和一个j(非常小),你就可以用变音符号获得6位(或更多)的信息。再加上一些其他的人声,你就有了紧凑的表示。好吧,datasize效率并不是base64的主要参数,因为它仍然比源数据大。base64的主要论点是,它可以通过电子邮件和其他基于文本的界面以可读的形式轻松复制粘贴。对于这种UTF-8编码也是如此(考虑到95%的互联网是UTF-8编码的),如果视觉效率是你主要关心的问题(从你的问题来看不是很明显),那么这种编码确实是有意义的。但是,术语“UTF-8”具有误导性。这将只是一个合适的二进制到Unicode编码。在这种情况下,Unicode字符的内部传输或存储方式与此无关。