我正在解码一些文字
Base64编码。我试过三个不同的
Java中的库(公共Base64
,Java.misc.
和java.mail)以及所有库
他们产生相同的结果
以下文字,这是不对的。
然而,当我使用Ruby解码下面的字符串时,我会得到不同的输出。我使用Ruby得到了正确的结果。
Ruby代码是print Base64.decode64('<Below String>')
,字符串是
RkxWAQEAAAAJAAAAABIAAK4AAAAAAAAAAgAKb25NZXRhRGF0YQgAAAAHAAV3aWR0aABAdAAAAAAA
AAAGaGVpZ2h0AEB0AAAAAAAAAAlmcmFtZXJhdGUAQBAAAAAAAAAADHZpZGVvY29kZWNpZABACAAA
AAAAAAAMY2FuU2Vla1RvRW5kAQEAD21ldGFkYXRhY3JlYXRvcgIAKVNpbXBsZUZMVldyaXRlci5h
cyB2MC44IHplcm9wb2ludG5pbmUuY29tAAAJ
输出应以FLV开头。我不确定我缺少什么,以及为什么输出使用Java不同。
答案 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