- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有要转换为可以复制/粘贴/通过电子邮件发送的文本的数据(主要是一系列的numpy数组)。我创建了执行此操作的以下公式。
def convert_to_ascii85(x):
p = pickle.dumps(x)
p = zlib.compress(p)
return b64.b85encode(p)
最佳答案
更新:我刚刚看到您更改了问题,以澄清您关心的是字符长度而不是字节长度。这是一个非常奇怪的约束。我从来没有听说过。我不知道该怎么做。但是,如果这是您的需要,并且您想要可预测的阻止行为,那么我认为您的问题非常简单。只需选择可以表示最多可能的唯一字符的兼容字符编码,然后在该字符集上映射二进制文件的块,以使每个块都是最长的块,但其位数少于您的可表示字符的位数字符编码。每个这样的块然后成为单个字符。由于这种约束有点奇怪,所以我不知道是否有图书馆可以做到这一点。
UPDATE2:我对以上内容感到好奇,我只是Google搜索并找到了这个文件:https://qntm.org/unicodings。如果您的工具和通讯 channel 可以处理UFT-16或UTF-32,那么您可能会寻求使用它。如果是这样,我希望本文能为您提供所需的解决方案。我认为本文仍在针对字节长度与字符长度进行优化,因此也许这将无法提供最佳解决方案,但它只能提供帮助(每个字符32个潜在位,而不是7或8)。我找不到任何试图在字符数上进行优化的东西,但是也许像Base65536这样的UTF-32方案是您的答案。 checkout https://github.com/qntm/base65536。
如果您关心的是字节长度,并且想要坚持使用通常所说的“可打印字符”或“普通可打印文本”,那么这就是我的原始答案...
有一些选项可以从Base85以外的编码中获得更好的“可读文本”编码空间效率。还存在放弃更多空间效率并选择Base64的情况。在这里,我将同时使用Base85和Base64。如果您可以使用Base85,则二进制文件的膨胀只会降低25%,这样做可以省去很多麻烦。
如果试图将任意二进制编码为“纯文本”,Base85几乎是您将要做的最好的事情;如果您希望“纯文本”编码可以从逻辑上分解为有意义的东西,Base85是您可以做的最好的事情。 ,可预测的块。从理论上讲,您可以使用在高ASCII范围内使用可打印字符的字符集,但是经验表明,如果许多工具和通讯 channel 无法处理直接二进制,则它们不能很好地处理高ASCII。尝试使用每4个二进制字节中额外的5位,则没有太多的额外空间节省,因此使用256位高ASCII与128位ASCII可能会使用这些额外空间。
对于任何BaseXX编码,该算法都会采用传入的二进制位,并使用其可使用的XX可打印字符对它们进行尽可能严格的编码。 Base85将比Base64紧凑,因为它使用的打印字符(85)比Base64(64个字符)更多。
标准ASCII中有95个可打印字符。因此,存在一个Base95,它是使用所有可打印字符的最紧凑的编码。但是尝试使用所有95位都很麻烦,因为这会导致传入位的阻塞不均匀。每4个二进制字节映射到少于5个字符的小数部分。
原来,您需要将85个字符编码为4个字节,恰好将其编码为5个可打印字符。许多人会选择增加大约10%的额外长度,以达到每4个编码字节导致精确5个ASCII字符的事实。这只是二进制文件大小的25%膨胀。对于它所节省的所有头痛,这根本不是一件坏事。因此,Base85背后的动机。
Base64用于生成更长但问题更少的编码。不使用对各种文本文档造成麻烦的字符,例如HTML,XML,JSON等。这样,Base64在几乎任何上下文中都可以使用,而无需进行任何转义。您必须更加小心使用Base85,因为它不会抛出任何这些有问题的字符。为了提高编码/解码效率,它使用从33(而不是32)开始的范围从33(“!”)到117(“u”),以避免出现经常出现问题的空格字符。 'u'上方不使用的字符没什么特别的。
这就是二进制-> ASCII编码方面的故事。另一个问题是在将二进制表示形式编码为ASCII之前,您可以采取什么措施来减小表示形式的大小。您选择使用pickle.dumps()
和zlib.compress()
。如果这些是您最好的选择,则留给其他讨论...
关于python - 将数据压缩成最小数量的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56728076/
表架构 DROP TABLE bla; CREATE TABLE bla (id INTEGER, city INTEGER, year_ INTEGER, month_ INTEGER, val I
我需要拆分字符串/或从具有以下结构的字符串中获取更容易的子字符串。 字符串将来自 window.location.pathname 或 window.location.href,看起来像 text/n
每当将对象添加到数组中时,我都会尝试更新 TextView ,并在 TextView 中显示该文本,如下所示: "object 1" "object 2" 问题是,每次将新对象添加到数组时,它都会覆盖
我目前正在寻找使用 Java 读取网站可见文本并将其存储为纯文本字符串的方法。 换句话说,我想转换成这样: Hello stupid World进入“ Hello World ” 或者类似的东西 Un
我正在尝试以文本和 HTML 格式发送电子邮件,但无法正确发送正确的 header 。特别是,我想设置 Content-Type header ,但我找不到如何为 html 和文本部分单独设置它。 这
我尝试了上面的代码,但我无法绑定(bind)文本,我怎样才能将资源内部文本 bloc
我刚刚完成了 Space Shooter 教程,由于没有 GUIText 对象,所以我创建了 UI.Text 对象并进行了相应的编码。它在统一播放器中有效,但在构建 Web 应用程序后无效。我花了一段
我有这个代码: - (IBAction)setButtonPressed:(id)sender { NSUserDefaults *sharedDefaults = [[NSUserDefau
抱歉标题含糊不清,但我想不出我想在标题中做什么。无论如何,对于图像上的文本,我使用了 JLabel 文本并将其添加到图标中。 JLabel icon = new JLabel(new Imag
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我在将 Twitter 嵌入到我从 HTML 5 转换的 wordpress 运行网站时遇到问题。 我遇到的问题是推文不是我的自定义字体... 这是我无法使用任何 css 定位的 HTML 代码,我正
我正在尝试找到解决由于使用以下形式的代码而导致的冗余字符串连接问题的最佳方法: logger.debug("Entering loop, arg is: " + arg) // @1 在大多数情况下,
我写了这个测试 @Test public void removeRequestTextFromRouteError() throws Exception { String input = "F
我目前正在创建一个正则表达式来拆分所有匹配以下格式的字符串:&[文本],并且需要获取文本。字符串可能类似于:something &[text] &[text] everything &[text] 等
有没有办法将标题文本从一个词变形为另一个词,同时保留两个词中使用的字母?我看过的许多 css 文本动画大多是视觉的,很少有旋转整个单词的。 我想要做的是从一个词过渡,例如“BEACH”到“CHANGE
总结matplotlib绘图如何设置坐标轴刻度大小和刻度。 上代码: ?
我在容器 (1) 中创建了容器 (2)。你能帮忙如何向容器(1)添加文本吗?下面是我的代码 return Scaffold( body: Padding( padding: c
我似乎找不到任何人或任何人这样做过。我试图限制我们使用的图像数量,并想创建一个带有渐变作为其“颜色”的文本,并在其周围设置渐变轮廓/描边 到目前为止,我还没有看到任何将两者结合在一起的东西。 我可以自
我正在为视频游戏暗黑破坏神 2 使用 discord.py 构建一个不和谐机器人。其中一项功能要求机器人从暗黑破坏神 2 屏幕截图中提取项目的名称和属性。我目前正在为此使用 pytesseract,但
我很难弄清楚如何旋转 strip.text theme 中的属性来自 ggplot2 .我使用的是 R 版本 3.4.2 和 ggplot2 版本 2.2.1。 以下是 MWE 的数据。 > dput
我是一名优秀的程序员,十分优秀!