Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Base64解码在Java和Ruby中给出了不同的结果_Java_Ruby_Base64 - Fatal编程技术网

Base64解码在Java和Ruby中给出了不同的结果

Base64解码在Java和Ruby中给出了不同的结果,java,ruby,base64,Java,Ruby,Base64,我正在用计算机解码一些文本 Base64。我试过三种不同的方法 Java中的库(commonsBase64,Java.misc.,以及Java.mail)和所有 它们中的任何一个都会产生相同的结果 下面的文本不正确 然而,当我使用Ruby解码下面的字符串时,我得到了不同的输出。我使用Ruby得到了正确的结果。 Ruby代码是print Base64.decode64(“”),字符串是 RkxWAQEAAAAJAAAAABIAAK4AAAAAAAAAAgAKb25NZXRhRGF0YQgAAAAH

我正在用计算机解码一些文本 Base64。我试过三种不同的方法 Java中的库(commons
Base64
Java.misc.
,以及Java.mail)和所有 它们中的任何一个都会产生相同的结果 下面的文本不正确

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

RkxWAQEAAAAJAAAAABIAAK4AAAAAAAAAAgAKb25NZXRhRGF0YQgAAAAHAAV3aWR0aABAdAAAAAAA
AAAGaGVpZ2h0AEB0AAAAAAAAAAlmcmFtZXJhdGUAQBAAAAAAAAAADHZpZGVvY29kZWNpZABACAAA
AAAAAAAMY2FuU2Vla1RvRW5kAQEAD21ldGFkYXRhY3JlYXRvcgIAKVNpbXBsZUZMVldyaXRlci5h
cyB2MC44IHplcm9wb2ludG5pbmUuY29tAAAJ

输出应以FLV开始。我不确定我遗漏了什么,以及为什么使用Java时输出会不同。

解码base64的结果是二进制数据。你不应该把它当作文本来打印

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

查看返回内容的字节以确定其是否正确


(不幸的是,据我所知,for Base64.decode64给出了您正在做的事情的示例—将Base64解码操作的结果视为文本。不清楚实际返回的数据类型。这就是我仍然喜欢静态类型语言的原因…)

您想打印成文本吗?这行不通,请尝试使用ByteArray存储解码的字符串

例如:

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

解码的字符串实际上以“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

@Jon-Ruby字符串是任意八位字节sequences@McDowell:那么,在控制台中将这些八位字节转换为字符时,使用的是什么编码?把文本和二进制概念混为一谈听起来是个坏主意……嗨,乔恩,我要转换的数据是我从客户端发送的视频文件。在服务器端,我需要将Base64中的数据解码为二进制数据并写入文件。我以字节数组的形式从Base64解码器获取输出,并将此字节数组写入一个文件。问题是视频播放器无法播放视频,抱怨文件不是以flv开头。@firemonkey:我怀疑它根本不是ASCII字符,这一点我都不感到惊讶。如果您将原始文件和写入服务器磁盘的文件的MD5之和取出来,它们是否不同?@firemonkey:Java字节被签名;大多数其他系统是未签名的。174和-82基本上是相同的值,所以这没有区别。你需要找别的地方。。。