私は現在、16進エディタインターフェイスを使用してByteBufferを編集し、対応するテキストをJTextPaneで編集できるアプリケーションを開発中です。現在の問題は、JTextPaneにStringが必要なためです。値を表示する前に、ByteBufferをStringに変換する必要があります。ただし、変換中に無効な文字は、文字セットのデフォルトの置換文字に置き換えられます。これは無効な値をスクラッシュします。そのため、バイトバッファに変換すると、無効な文字の値がデフォルトの置換文字のバイト値に置き換えられます。文字列に無効な文字のバイト値を保持する簡単な方法はありますか?私は次の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
問題を示すコードを含めるように質問を更新しました。これは私のコードのバグではなく、デフォルトでこのように動作するはずです。 –