2012-07-18 190 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));