현재 사용자가 16 진수 편집기 인터페이스를 통해 ByteBuffer를 편집 할 수 있고 JTextPane을 통해 해당 텍스트를 편집 할 수있는 응용 프로그램을 개발 중입니다. 현재 문제는 JTextPane에 String이 필요하기 때문입니다. 값을 표시하기 전에 ByteBuffer를 String으로 변환해야합니다. 그러나 변환 중에는 유효하지 않은 문자가 charsets 기본 대체 문자로 대체됩니다. 이 잘못된 값을 스쿼시하므로 바이트 버퍼로 다시 변환 할 때 잘못된 문자 값이 기본 대체 문자의 바이트 값으로 대체됩니다. 문자열에 유효하지 않은 문자의 바이트 값을 유지하는 쉬운 방법이 있습니까? 나는 다음과 같은 stackoverflow 게시물을 읽었지만 사람들은 보통 인쇄 할 수없는 문자를 바꾸고 싶다. 나는 그들을 보존해야한다.Java에서 ByteBuffer와 String 간의 변환 문제
Java: Converting String to and from ByteBuffer and associated problems
이 작업을 수행하거나 내가 텍스트 편집기에서 일어날과의 ByteBuffer에 적용 할 모든 변경 사항을 추적 할 필요가 할 수있는 쉬운 방법이 있나요 ?
다음은 문제를 나타내는 코드입니다. 코드는 ByteBuffer 대신 byte []를 사용하지만 문제는 동일합니다.
byte[] temp = new byte[16];
// 0x99 isn't a valid UTF-8 Character
Arrays.fill(temp,(byte)0x99);
System.out.println(Arrays.toString(temp));
// Prints [-103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103]
// -103 == 0x99
System.out.println(new String(temp));
// Prints ����������������
// � is the default char replacement string
// This takes the byte[], converts it to a string, converts it back to a byte[]
System.out.println(Arrays.toString(new String(temp).getBytes()));
// I need this to print [-103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103]
// However, it prints
//[-17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67]
// The printed byte is the byte representation of �
이 코드가 필요하다고 생각합니다. 버그 같은데. 또한 개념적 오류 일 수 있습니다 : 바이트로 변환하는 데 문제가있는 정확한 텍스트 시퀀스는 무엇입니까? – markspace
문제를 나타내는 코드를 포함하도록 질문을 업데이트했습니다. 이것은 내 코드의 버그가 아니며 기본적으로이 방법으로 작동해야합니다. –