2011-12-27 2 views
1

현재 DataInput/OutputStream을 사용하여 네트워크를 통해 String을 전송하고 있습니다. 내가 전송중인 문자열을 해독하기 위해 바이트 배열로 변환해야합니다.DataOutputStream.writeUTF()에서 읽을 때 Java 문자열의 '원본'바이트를 얻는 방법?

그러나 문자열이 DataOutputStream.writeUTF ("foobar")를 사용하여 작성된 이후 바이트 배열에는 암호화 된 Java 수정 UTF-8 데이터가 포함되어있어 암호화 프로세스가 지연됩니다.

Java 수정 UTF-8 String에서 원래 바이트를 가져 오는 방법은 무엇입니까?

답변

0

유니 코드에는 여러 가지 변형이 있습니다. 여기서 s-with-^는 한 문자 또는 두 가지가 될 수 있습니다. Java에는 하나의 특정 변형으로 변환하는 Normalizer 클래스가 있습니다. http://docs.oracle.com/javase/tutorial/i18n/text/normalizerapi.html 을 참조하거나 API를 바로 확인하십시오.

이렇게하려면 원래 문자열이 하나의 변형을 준수해야합니다. 불법 시퀀스가 ​​있기 때문에 바이트를 취하여 UTF-8로 인터폴레이션 할 수 없습니다. 이것은 바이트 시퀀스 중간에 잘못된 바이트/문자를 인식하지 못하도록하기 위해 수행되었습니다.

String normalizedString = Normalizer.normalize(s, Normalizer.Form.NFD); 
0

당신이 바이트로 문자열을 작성하는 경우 [] 바이트 [] 사용을 http://docs.oracle.com/javase/1.4.2/docs/api/java/io/DataOutputStream로 읽어 무엇 .html # write (byte [], int, int)