2011-03-14 6 views
2
String encode = Base64.encodeBase64String("Hello".getBytes()); 
System.out.println(encode); 
byte[] decode = Base64.decodeBase64(encode); 
System.out.println(decode.toString()); 

여기서 무엇이 잘못되었는지 알 수 없습니다. 가능한 모든 조합을 시도했습니다. 캐릭터 셋, toString, toString를 설정합니다. 인코딩은 완벽하게 작동합니다. 그 번호를 웹 디코더에 넣고 매번 올바른 값을 얻을 수 있습니다. 이 일을 제대로 할 수는 없습니다.Base64.decodeBase64를 작동시키지 못함 (Commons codec)

출력 : 내가 루프를 사용하여 수동으로 문자열에 문자를 추가하면 작동 할 수

run: 
SGVsbG8= (encode) 

[[email protected] (decode) 

. 하지만 toString이 나 한테 그렇게했다고 생각 했어?

답변

5

즉각적인 문제는 바이트 배열을 문자열로 변환하는 방법입니다.

대신을 시도해보십시오

System.out.println(new String(decode)); 

그러나를, 그것은 일반적으로 문자 인코딩을 지정하지 String.getBytes() 또는 new String(byte[])의 오버로드를 사용하는 것은 좋은 생각입니다. 그들은 플랫폼 기본 인코딩을 사용합니다. 즉, 코드가 이식 가능하지 않다는 것을 즉각적으로 나타냅니다. UTF-8과 같은 공통 인코딩을 사용하는 것이 좋습니다.

+0

대단히 감사합니다. 배열의 toString에 대해 생각하지 않고 있었다고 생각합니다. 이제는 의미가 있습니다. –

2

toString()은 배열에서 예상 한대로 작동하지 않습니다 ... toString() 구현의 기본값은 Object이며 객체의 해시 코드를 기반으로 문자열을 반환합니다. 시도하십시오 new String(decode).

관련 문제