【问题标题】:My base64 concatenated string has = characters. How to get rid of them我的 base64 连接字符串有 = 字符。如何摆脱它们
【发布时间】:2015-03-16 14:45:08
【问题描述】:

我应该如何连接 base64 字符串以摆脱“=”字符?

我从 servlet 发送了一个字节流[] 的数据作为 http 响应,并且在客户端我想打开 pdf 查看器。但是,由于这些额外的字符,我无法查看它。

我尝试使用 +=、join、concat 进行连接,但每个子字符串的末尾仍然有 = 字符。

如果有办法在没有最后一个字符的情况下连接字符串。

【问题讨论】:

  • 你能发布你当前的代码吗?
  • 如果 base64 以 = 字符串结尾,则不能连接;您必须取消编码并重新编码。

标签: javascript string base64 concatenation concat


【解决方案1】:

标准 base-64 编码将三个字节(3 * 8 位)编码为 4 个字符(4 * 6 位)。如果原始数据中的字节数不能被3整除,则余数为1时添加2个=,余数为2时添加1个=

现在,很遗憾,如果第一个以填充字符 = 结尾,则不能连接 2 个 base-64 编码字符串 - 您必须对两者进行解码,连接二进制字符串*,然后重新编码,否则后半部分将失效同步,第二部分的所有字节都将被错误解码。

[*] 没有必要对整个第一部分进行重新编码,但为此进行优化不一定值得。

【讨论】:

  • 所以我必须找到一种方法来连接 javascript 中的位。谢谢你的回答。
【解决方案2】:

我不确定我是否理解您的问题,但对我来说,您似乎想连接多个 Base64 编码的字符串,然后对其进行解码。无论= 字符如何,这都不起作用。

例如看看下面的 Base64 编码:

X20    -> IA==
X20 20 -> ICA=

但连接IAIA 并对其进行解码会得到X 20 02 00

它不能工作的原因是 Base64 编码形式的每个字符可能代表多个未编码字节的部分,并且每个未编码字节可能代表多个 Base64 字符。

正如 Antti Haapala 正确指出的那样:您必须先解码,然后再连接输出,而不是反之亦然。

【讨论】:

  • 如果没有= 并且它是使用使用==进行填充的方案编码的,那么它可以连接。
猜你喜欢
  • 2016-10-15
  • 1970-01-01
  • 2018-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-19
  • 1970-01-01
相关资源
最近更新 更多