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

问题描述

这与以下问题有关:

为什么不使用base128?

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

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

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

标签: unicodebase64ascii

解决方案


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

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

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


推荐阅读