2010-04-16 1 views
3

Java에서 바이트 배열을 처리하는 프로그램이 있는데, 이제 이것을 XML 파일에 쓰고 싶습니다. 그러나 다음 바이트 배열을 적절한 문자열로 변환하여 파일에 쓸 수있는 방법은 확실하지 않습니다.바이트 배열을 이해할 수있는 문자열로 변환

String temp = new String(encodedBytes, "UTF-8"); 

가 만 encodedBytes이 "\ufffd\ufffd ^\ufffd\ufffd-m\ufffd\ufffd\/ufffd \ufffd\ufffdIA\ufffd\ufffd"이 포함 된 디버거 쇼를 가지고 : 그것은 유니 코드 문자라고 가정하면 다음 코드를 시도했다. String은 알파벳 숫자 형식의 해시를 포함해야합니다.

위의 String을 출력용으로 현명한 String으로 변환하는 방법은 무엇입니까?

+0

"이해 가능한"또는 누구에게 "현명한"? 인간이 값을 이해할 수 있도록 출력하거나, 다시 읽을 수 있고 바이트 배열로 다시 변환 할 수있는 형식으로 출력하는 것이 목표입니까? –

+0

직렬화 (Java에서 배열 직렬화 가능) 작동합니까? 예 : http://www.rgagnon.com/javadetails/java-0470.html – Searles

+0

@Bert F : 인자를 위해서 인간이 읽을 수있는 출력이 "2jvjsgjlgj39hg9"라고 가정 해 봅시다. 그 질문에있는 문자열을 해당 문자열로 변환하여 사람이 읽을 수 있고 저장 될 수 있도록하고 싶습니다. –

답변

7

문자열이 암호 해시 체계 (아마도 그렇게 보입니다)의 결과물이면 Base64로 인코딩하여 일반 텍스트로 변환해야합니다.

텍스트 파일로 출력 할 원시 바이트가있는 경우 표준 절차는 기본 64 인코딩을 사용하는 것입니다. Commons Codec 라이브러리는 Base64 인코더/디코더를 제공합니다.

희망이 도움이됩니다.

+0

그건 아주 좋은 답변입니다. –

+0

Asker가 해당 요소의 속성을 만들어 인코딩을 나타낼 것을 권장합니다 (DTD 또는 스키마의 기본값을 사용하므로 반드시 문서에서 지정할 필요는 없습니다). –

+0

네, 해시예요. Commons Codec에 대해 곧 살펴 보겠습니다. 단지 항아리를 다운로드하여 프로젝트에 구현한다고 가정합니다. –

10

바이트 배열이 UTF-8처럼 보이지 않습니다. \ufffd (이름이 REPLACEMENT CHARACTER)은 "used to replace an incoming character whose value is unknown or unrepresentable in Unicode."

부록입니다. 다음은 이러한 현상이 어떻게 발생하는지 간단한 예입니다. byte으로 캐스트하면 ñ의 코드 포인트는 UTF-8 또는 US-ASCII가 아닙니다. 은 유효한 ISO-8859-1 인입니다. 실제로 바이트를 String으로 인코딩하기 전에 바이트의 의미를 알아야합니다.

public class Hello { 

    public static void main(String[] args) 
      throws java.io.UnsupportedEncodingException { 
     String s = "Hola, señor!"; 
     System.out.println(s); 
     byte[] b = new byte[s.length()]; 
     for (int i = 0; i < b.length; i++) { 
      int cp = s.codePointAt(i); 
      b[i] = (byte) cp; 
      System.out.print((byte) cp + " "); 
     } 
     System.out.println(); 
     System.out.println(new String(b, "UTF-8")); 
     System.out.println(new String(b, "US-ASCII")); 
     System.out.println(new String(b, "ISO-8859-1")); 
    } 
} 

출력 :

 
Hola, señor! 
72 111 108 97 44 32 115 101 -15 111 114 33 
Hola, se�or! 
Hola, se�or! 
Hola, señor!