2012-07-18 125 views
43

我试图解码一个简单的Base64字符串,但无法这样做。我目前正在使用org.apache.commons.codec.binary.Base64包。在Java中解码Base64字符串

我使用的测试字符串是:abcdefg,使用PHP YWJjZGVmZw==编码。

这是我目前使用的代码:

Base64 decoder = new Base64(); 
byte[] decodedBytes = decoder.decode("YWJjZGVmZw=="); 
System.out.println(new String(decodedBytes) + "\n") ; 

上面的代码不会引发错误,而是不输出如预期已解码的字符串。

+0

好,首先,你应该总是从字节转换为字符时指定字符集,也许是“US-ASCII”你比如字符串('新的String(decodedBytes“ US-ASCII” )')。 – jtahlborn 2012-07-18 15:13:47

+0

@jtahlborn apache commons编解码器是建立在系统默认编码的“只是工作”,如果你没有另外指定 – Affe 2012-07-18 15:18:35

+0

@TomasB你贴的代码对我来说工作正常,是完整的样本? – Affe 2012-07-18 15:18:56

回答

49

修改您所使用的包装:

import org.apache.commons.codec.binary.Base64; 

,然后用它是这样的:

byte[] decoded = Base64.decodeBase64("YWJjZGVmZw=="); 
System.out.println(new String(decoded, "UTF-8") + "\n"); 
+0

。小心太阳。*包!http://stackoverflow.com/questions/469695/decode-base64-data-in-java – 2012-07-18 15:19:44

+0

对不起,我应该指定,我必须使用org.apache.commons.codec.binary.Base64因为它是一个安全的url解码器 – TomasB 2012-07-18 15:20:14

+3

JDK中有javax.xml.bind.DatatypeConverter.parseBase64Binary,所以你不需要使用sun API或外部库来处理base64。 – vbezhenar 2012-07-18 15:24:05

1

常用的Base64它用于图像。如果你想(在这个例子与org.apache.commons.codec.binary.Base64包JPG格式)图像解码:

byte[] decoded = Base64.decodeBase64(imageJpgInBase64); 
FileOutputStream fos = null; 
fos = new FileOutputStream("C:\\output\\image.jpg"); 
fos.write(decoded); 
fos.close(); 
+2

Base64是一种byte []编码规范,与图像没有任何特殊关系,这种做法也很常见。 – 2016-03-19 01:18:47

+2

图像的基础64编码在较老的或不太复杂的消息传递协议上很常见。 – 2017-06-15 19:08:52

1

下应与Apache常见编解码器的最新版本的工作

byte[] decodedBytes = Base64.getDecoder().decode("YWJjZGVmZw=="); 
System.out.println(new String(decodedBytes)); 

和编码

byte[] encodedBytes = Base64.getEncoder().encode(decodedBytes); 
System.out.println(new String(encodedBytes));