2011-11-17 18 views
6

me puede ayudar a resolver este:En Android, ¿cómo concatenar cadenas codificadas en base64?

Tengo dos cadenas de Email-ID y contraseña como

String name = "[email protected]"; 
String pass = "abc"; 

que codifican estos cadena de dos en base 64 como

String encoded_name = new String(Base64.encode(name.getBytes(), 0)); 
String encoded_pass = new String(Base64.encode(pass.getBytes(), 0)); 

y necesito concatenar estas dos cadenas codificadas con espacio como

String merge = encoded_name + " " + encoded_pass; 

que marcó esta cadena en la consola por

System.out.print("Concatenate string= " + merge); 

pero en la consola que estoy recibiendo resultado en dos líneas como esto

11-18 00:25:29.898: INFO/System.out(1244): Merge= eHl6QGdtYWlsLmNvbQ== 
11-18 00:25:29.908: INFO/System.out(1244): YWJj 

¿Por qué este happing el resultado es inesperado para mí, por qué no está imprimiendo en una sola línea. Por favor ayúdame a solucionar esto.

Gracias

+0

nunca he utilizado System.out para mostrar información en Android, se puede tratar con la clase de registro ? Log.e ("BASE64", fusionar); –

+0

No efectuado por el Log.e –

+0

Compruebe si su cadena Base64 finaliza con una "nueva línea", o elimínela con * String.trim() *. – JimmyB

Respuesta

20

Debe utilizar el indicador NO_WRAP como se describe en el Docs, la clase Base64 no agregará nuevas líneas adicionales.

NO_WRAP: bit de bandera de codificador omitir todos los terminadores de línea (es decir, la salida será en una línea larga).

Así que cambiar sus líneas a lo siguiente:

salida
String encoded_name = new String(Base64.encode(name.getBytes(), Base64.NO_WRAP)); 
String encoded_pass = new String(Base64.encode(pass.getBytes(), Base64.NO_WRAP)); 

Esta voluntad lo siguiente:

11-17 19:16:51.283: INFO/System.out(354): Concatenate string= eHl6QGdtYWlsLmNvbQ== YWJj 
0

Mira this doc, la sección mimo establece que

MIME no especifica una longitud fija para las líneas codificadas en base 64, pero no especifica una longitud de línea máxima de 76 caracteres. Además, especifica que cualquier carácter extra alfabético debe ser ignorado por un decodificador compatible, aunque la mayoría de las implementaciones usan un par de nueva línea CR/LF para delimitar las líneas codificadas.

Sólo se debe considerar la eliminación de la última carbón de la primera cadena de base 64, que parece ser un \ n (un método más genérico sería probar wether lo es o no.)

Saludos, Stéphane

1

Por favor, echar un vistazo a Android Api reference Document. Resolverá todas las demás consultas relacionadas con la codificación/decodificación Base64 en android.

una forma más eficiente para resolver su problema:

String encoded_name = Base64.encodeToString(name.getBytes("utf-8"), Base64.NO_WRAP); 
String encoded_pass = Base64.encodeToString(pass.getBytes("utf-8"), Base64.NO_WRAP); 

hacia fuera puesto: -

11-17 10:55:27.492: V/BASE-64-.encodeToString(525): eHl6QGdtYWlsLmNvbQ== YWJj 
Cuestiones relacionadas