다음 코드 고려해운반 유니 대용 값
byte aBytes[] = { (byte)0xff,0x01,0,0,
(byte)0xd9,(byte)0x65,
(byte)0x03,(byte)0x04, (byte)0x05, (byte)0x06, (byte)0x07,
(byte)0x17,(byte)0x33, (byte)0x74, (byte)0x6f,
0, 1, 2, 3, 4, 5,
0 };
String sCompressedBytes = new String(aBytes, "UTF-16");
for (int i=0; i<sCompressedBytes.length; i++) {
System.out.println(Integer.toHexString(sCompressedBytes.codePointAt(i)));
}
을 가져 다음 잘못된 출력 : 다음 단
ff01, 0, fffd, 506, 717, 3374, 6f00, 102, 304, 500.
, 입력 데이터의 0xd9
가 0x9d
변경되면 다음 올바른 출력이 얻어집니다 :
ff01, 0, 9d65, 304, 506, 717, 3374, 6f00, 102, 304, 500.
현실 기능은 바이트 0xd9
이 상위 대리 유니 코드 표식이라는 사실 때문입니다.
질문 : 자바 유니 코드 문자열에서 서로 게이트 바이트 (0xd800
~ 0xdfff
)를 추출, 식별 및 추출 할 수있는 방법이 있습니까?
감사
나는 당신이 옳다고 생각합니다. 나는 단지 같은 결론에 도달했으나 지식이 많은 사람이 이미 대답했는지 다시 확인했다. –
단순히 "(byte) 0xdc, (byte) 0xef"를 삽입하면 "ff01 694ef dcef ..."어느 쪽이 될 수 있습니다. –
답변 해 주셔서 감사합니다. 하지만 문제는 대리 문자를 포함시키는 문제가 아닙니다. 요구 사항은 임의의 바이트 시퀀스 (압축에서 출력 됨)를 Java 문자열에 제공하고이를 다시 동등한 바이트 시퀀스로 읽는 것입니다. –