为 lzma 压缩编码一个 unicode 字符串

encoding a unicode string for lzma compression

我有一个 Unicode 字符串 - Python 2.7.

我今天也很头疼 – 不是由 Unicode 引起的真正的头疼 – 并且无法像我需要的那样保持对问题的关注。在花粉数量下降之前,我比思考者更愚蠢。

我需要使用 backports.lzma 压缩我的 'string'。有时我会得到一个错误,因为 'string' 不是一个 ASCII 兼容的 String 而是一个使用一些当前未知字符集(可能是 UTF-8 但不能保证)的 Unicode 对象。 lzma.compress 想要 Stringbytes() 兼容对象。

此时我的代码中不一定有 unicode 的字符编码。我只知道它是一个 unicode 对象。通常在类似的情况下,我知道编码并且可以采取适当的行动。我通常也不关心在转码中丢失一两个字符。这次我在乎了。

这让我想到了几个问题:

• 是否有可供选择的安全编码,其大小也会稍微小一些(对于大多数 utf-8 文档)?

• 我是否需要担心解码与我压缩的早期文档的向后兼容性?我没有完全阅读 lzma 文档(我的错)并且没有意识到它需要 String.

压缩操作的是字节,而不是文本,所以它自然需要一个 str (2.x) 或 bytes (3.x) 对象。您无需关心内部文本表示是什么,因为您将自己 encode/decode 文本。

  • Is there a safe encoding to choose that will also be somewhat minimal in size (for a majority of utf-8 docs)?

没有。只需编码为 UTF-8 即可完成。

  • Do I need to worry about backwards compatibility on decoding vs the earlier documents I've compressed? I did not fully read the lzma docs (my bad) and didn't realize it needed a String.

如果您只压缩了 ASCII 文本,那么您可以毫无问题地解码为 UTF-8,因为 UTF-8 和 ASCII 对 ASCII 文本的编码方式完全相同。