2012-07-18 21 views
43

Estoy intentando decodificar una cadena Base64 simple, pero no puedo hacerlo. Actualmente estoy usando el paquete org.apache.commons.codec.binary.Base64.Decodificación de una cadena Base64 en Java

La cadena de prueba que estoy usando es: abcdefg, codificado con PHP YWJjZGVmZw==.

Este es el código que estoy usando actualmente:

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

El código anterior no arroja un error, pero en cambio no emitirá la cadena decodificada como se esperaba.

+0

así, en primer lugar, siempre se debe especificar un conjunto de caracteres cuando se convierte de bytes a caracteres, tal vez "US-ASCII" para usted ejemplo de cadena ('nueva cadena (decodedBytes" US-ASCII ") '). – jtahlborn

+0

@jtahlborn el códec de apache commons está diseñado para "solo funcionar" en la codificación predeterminada del sistema si no especificas lo contrario – Affe

+0

El código de @TomasB que publicaste funciona bien para mí, ¿es esa la muestra completa? – Affe

Respuesta

49

modificar el paquete que está utilizando:

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

y luego usarlo como esto:

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

¡Tenga cuidado con sun. * Packages! Http://stackoverflow.com/questions/469695/decode-base64-data-in-java –

+0

Disculpe que debería haber especificado que tengo que usar org.apache.commons.codec.binary.Base64 porque es un decodificador de url seguro. – TomasB

+3

Hay javax.xml.bind.DatatypeConverter.parseBase64Binary en JDK, por lo que no es necesario utilizar sun API o bibliotecas externas para trabajar con base64. – vbezhenar

1

base 64 Comúnmente se utiliza para las imágenes. si te gusta para decodificar una imagen (jpg en este ejemplo con el paquete org.apache.commons.codec.binary.Base64):

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

Base64 es una especificación de codificación byte [] y no tiene nada específicamente que ver con imágenes ni es una práctica común. –

+2

La codificación de imágenes en la Base 64 es común en protocolos de mensajería más antiguos o menos sofisticados. –

1

El siguiente debe funcionar con la última versión del códec común Apache

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

y para la codificación

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