Base64解码在Java和Ruby中提供不同的结果

时间:2011-05-16 16:52:24

标签: java ruby base64

我正在解码一些文字     Base64编码。我试过三个不同的     Java中的库(公共Base64Java.misc.和java.mail)以及所有库     他们产生相同的结果     以下文字,这是不对的。

然而,当我使用Ruby解码下面的字符串时,我会得到不同的输出。我使用Ruby得到了正确的结果。 Ruby代码是print Base64.decode64('<Below String>'),字符串是

RkxWAQEAAAAJAAAAABIAAK4AAAAAAAAAAgAKb25NZXRhRGF0YQgAAAAHAAV3aWR0aABAdAAAAAAA
AAAGaGVpZ2h0AEB0AAAAAAAAAAlmcmFtZXJhdGUAQBAAAAAAAAAADHZpZGVvY29kZWNpZABACAAA
AAAAAAAMY2FuU2Vla1RvRW5kAQEAD21ldGFkYXRhY3JlYXRvcgIAKVNpbXBsZUZMVldyaXRlci5h
cyB2MC44IHplcm9wb2ludG5pbmUuY29tAAAJ

输出应以FLV开头。我不确定我缺少什么,以及为什么输出使用Java不同。

3 个答案:

答案 0 :(得分:4)

解码base64的结果是二进制数据。你不应该真的尝试打印它,就好像它是文本一样。

在不了解Ruby的情况下,我希望调用Base64.decode64的结果是某种字节数组......并且可以通过多种方式将其转换为文本。

查看返回内容的 bytes ,以确定它是否正确。

(不幸的是,据我所知,Base64.decode64的documentation提供了你正在做的事情的例子 - 将base64解码操作的结果视为文本。它不是清楚实际上返回了什么类型的数据。这就是我仍然喜欢静态类型语言的原因......)

答案 1 :(得分:1)

您是否正在尝试打印到文本中?这将无法工作,请尝试使用ByteArray存储已解码的字符串。

示例:

BASE64Decoder decoder = new BASE64Decoder();
byte[] decodedBytes = decoder.decodeBuffer(encodedBytes);

答案 2 :(得分:0)

解码后的字符串实际上以'FLV'开头:

require 'base64'
Base64.decode64('RkxWAQEAAAAJAAAAABIAAK4AAAAAAAAAAgAKb25NZXRhRGF0YQgAAAAHAAV3aWR0aABAdAAAAAAA AAAGaGVpZ2h0AEB0AAAAAAAAAAlmcmFtZXJhdGUAQBAAAAAAAAAADHZpZGVvY29kZWNpZABACAAA AAAAAAAMY2FuU2Vla1RvRW5kAQEAD21ldGFkYXRhY3JlYXRvcgIAKVNpbXBsZUZMVldyaXRlci5h cyB2MC44IHplcm9wb2ludG5pbmUuY29tAAAJ')
=> "FLV\001\001\000\000\000\t\000\000\000\000\022\000\000\256\000\000\000\000\000\000\000\002\000\nonMetaData\b\000\000\000\a\000\005width\000@t\000\000\000\000\000\000\000\006height\000@t\000\000\000\000\000\000\000\tframerate\000@\020\000\000\000\000\000\000\000\fvideocodecid\000@\b\000\000\000\000\000\000\000\fcanSeekToEnd\001\001\000\017metadatacreator\002\000)SimpleFLVWriter.as v0.8 zeropointnine.com\000\000\t"

JRuby 1.6.1