问题标签 [base85]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
encoding - 当您有需要通过 ascii 通道发送的二进制数据时,您使用什么文本编码方案?
如果您有需要编码的二进制数据,您使用什么编码方案?
我知道:
还有其他常用的编码方案吗?如果是这样,有什么优点和缺点?
编辑:这很有用,例如,当尝试在 cookie 中存储任意数据时。Cookie 只能存储文本,不能存储任意数据,因此您需要以某种方式对其进行转换,最好是通过某种方式将其转换回来。此外,假设您使用的是无状态服务器,因此您无法将状态保存在服务器上,而只是将标识符放入 cookie 中。当然,如果您这样做,您还需要某种方式来验证用户传回给您的内容是否就是您传递给用户的内容,例如签名。
此外,由于目前的共识是你应该使用 base64,因为它很普遍,我还要指出这是我使用的......我只是好奇是否有人使用过其他任何东西,如果是,为什么。
编辑:以防万一有人偶然发现,如果您确实想使用 Base64 将数据存储在 cookie 中,则需要使用修改后的 Base64 实现。看到这个答案的原因。
go - 获取解码 Ascii85 的长度
ascii85 具有获取编码最大长度的功能MaxEncodedLen()
。
我认为它应该有一个功能来获得解码时的长度,就像它在 Base64 中一样。
java - Base85 又名 ASCII85 java 项目
有谁知道除了com.idataconnect.lib.ascii85codec java 项目之外的任何其他类似org.apache.commons.codec.binary.Base64
类的东西吗?
php - 更短的 UUID,ASCII85 和 PHP
我读到了UUID v4,它几乎是独一无二的,这就是我所需要的。问题是,这个数字太大了,是否有可能生成像 Facebook 或 Twitter 这样字符更少的 UUID?
我阅读了一些帖子,您可以在其中使用 Ascii85 将此代码缩小到 20,但没有看到可靠的 PHP 脚本可以完成这项工作。有人知道测试类吗??对于随机 ID,这是存储这 20 个字符的最佳方式,对吗?
- - 编辑 - -
@大卫施瓦茨
谢谢。我需要一个服务器中的随机唯一标识符,介于 8 到 16 个字符之间(如果它是最低的,那么 20 就可以了)。它的想法是识别具有可读 ID 但不是增量的对象(第一个对象 10001,第二个 10002),542A4B243J、C63426KJ70、O30V4U1I9P 等方式很好。ID 必须是(至少)6 个 MySQL 表的主键。对象是使用 PHP 在同一服务器中创建的。
@ta.speot.is
我写了“没有看到可靠的 PHP 脚本来完成这项工作。有人知道经过测试的课程吗??” 我认为谷歌中出现的所有代码都没有经过测试,你有没有测试过所有的链接?
@sarnold
谢谢,但我很抱歉,没理解好=(
java - 需要 Base85 (Ascii85) 编码器的帮助
Base85 ASCII 编码器/解码器
在这里寻找初始参考 ->> Base85 维基百科页面
我正在为 java 制作 Base85 编码器/解码器,我不希望从完整的编码器中获得我的编程或代码的答案或解决方案。我可以从我的代码中提供源代码,但这是不必要的,因为这个问题更适合理解这个概念。我在我的代码中成功地包含了该维基百科页面上概述的所有步骤,直到 32 位值点,其中以 10 为底的 32 位的总值转换为 base85。
看这里 ->> Base85 编码表
所以,具体来说,我已经成功获得了 1298230816 的号码 - 但现在我很难过。如上所示,如何获得以 85 为底的数字?(24 *85^4;73 *85^3;80 *85^2;78 *85;61)。我将通过什么数学过程来找到这些值?
encoding - 为什么 Ascii85 编码不允许动态压缩?
根据维基百科:
[Ascii85 使用] ASCII 字符 33 (!) 到 117 (u) 包括在内(表示基数为 85 的数字 0 到 84),以及字母 z(作为表示 32 位 0 值的特殊情况)。
[btoa] 4.2 版为一组所有 ASCII 空格字符添加了“y”例外
虽然 0 数据可能很常见,但使用z
压缩 0 似乎是一种任意优化,并不总是有用。
y
同样,仅当原始字节包含相邻空格时才使用较少的使用。空间的 Unicode 编码实际上在 Unicode 文本20 00
中0x20202020
并不常见。
二进制数据确实经常有相邻00
的 's,但它也经常包含相邻FF
的 's。
文本数据通常包含相邻的空格,但也经常包含相邻的制表符或相邻的换行符。
似乎频率分析和使用 9 或 10 个字符(Ascii 字符 118-126/127,或v
通过~
/ DEL)来表示 9/10 最常见的 32 位值,可能会导致更好的压缩。
压缩字符到 32 位值的映射可能位于包含在<[
和之间的编码字符串的开头]>
。对于 4 个重复字节的 32 位值,32 位值可以缩写为重复的十六进制值。
例如:
二进制数据(192 字节):
00 00 00 00 FF FF FF FF 20 20 20 20 2D 2D 2D 2D 09 09 09 09 0D 00 0A 00
00 00 00 00 FF FF FF FF 20 20 20 20 2D 2D 2D 2D 09 09 09 09 0D 00 0A 00
00 00 00 00 FF FF FF FF 20 20 20 20 2D 2D 2D 2D 09 09 09 09 0D 00 0A 00
00 00 00 00 FF FF FF FF 20 20 20 20 2D 2D 2D 2D 09 09 09 09 0D 00 0A 00
00 00 00 00 FF FF FF FF 20 20 20 20 2D 2D 2D 2D 09 09 09 09 0D 00 0A 00
00 00 00 00 FF FF FF FF 20 20 20 20 2D 2D 2D 2D 09 09 09 09 0D 00 0A 00
00 00 00 00 FF FF FF FF 20 20 20 20 2D 2D 2D 2D 09 09 09 09 0D 00 0A 00
00 00 00 00 FF FF FF FF 20 20 20 20 2D 2D 2D 2D 09 09 09 09 0D 00 0A 00
注意空格
20
、连字符2D
、制表符09
和 Unicode 回车换行符的存在0D 00 0A 00
可以编码为(79 字节)
<[00;FF;20;2D;09;0D000A00]><~vxyz{|vxyz{|vxyz{|vxyz{|vxyz{|vxyz{|vxyz{|vxyz{|~>
使用这种压缩的编码方法有优点吗?为什么各种 Ascii85 规范在压缩方面没有更具侵略性?
python - 解码base85编码字符串时出现base85溢出错误
我需要将二进制数据嵌入到 XML 文件中,因此我选择为此使用 base85 编码。
我有一个大字节数组,里面充满了对struct.pack()
via的调用的输出bytearray.extend(struct.pack(varying_data))
。然后它被压缩zlib
并用base64.b85encode()
.
这一直有效,但是在单个输入文件上,出现以下奇怪的错误:
然后我修改了 base64.py 以打印出当前块的值以及它包含的字节。输入块是b'||a|3'
,它的值是4.331.076.573,大于256^4 = 4.294.967.296,因此不能用四个字节表示(这就是错误的来源)。
但我不明白的是:这怎么可能发生?
这是代码的重要部分:
以及解码代码:
Base85 理论上可以使用85^5 = 4.437.053.125 种可能的组合,但是当它从字节中获取输入时,我想知道这怎么可能。这是来自压缩吗?这不应该是问题,因为编码和解码应该是对称的。如果是问题,无论如何如何压缩数据?
选择 Ascii85 代替 ( a84encode()
) 有效,但我认为这并不能真正解决问题,也许在其他情况下会失败?
谢谢您的帮助!