web-dev-qa-db-ja.com

JavaのBase64文字列のデコード

単純なBase64文字列をデコードしようとしていますが、デコードできません。現在、org.Apache.commons.codec.binary.Base64パッケージを使用しています。

私が使用しているテスト文字列は、PHP YWJjZGVmZw==を使用してエンコードされたabcdefgです。

これは私が現在使用しているコードです:

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

上記のコードはエラーをスローしませんが、代わりにデコードされた文字列を期待どおりに出力しません。

56
TomasB

使用しているパッケージを変更します。

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

そして、次のように使用します:

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

以下は、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));
8
Hany Sakr

通常、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();
3
Alberto Perez

Apacheを使用したくない場合は、Java8を使用できます。

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