バイナリ形式 ( hex: 80 3b c8 87 0a 89
) のデータがあり、Jackcess を介して MS Access db にバイナリ データを保存するために、それを文字列に変換する必要があります。JavaでバイナリデータにStringを使用するつもりはないことはわかっていますが、Access dbはサードパーティ製品であり、まったく制御していません。
そこでバイナリデータに変換して保存しようとしたのですが、残念ながら予想外の結果でした。
byte[] byteArray = new byte[] {0x80, 0x3b, 0xc8, 0x87, 0x0a 0x89};
System.out.println(String.format("%02X ",byteArray[0])+String.format("%02X ", byteArray[1]));//gives me the same values
String value = new String(byteArray, "UTF-8");//or any other encoding
System.out.println(value);//completely different values
new String
何が起こっているのか、バイナリデータを文字列に変換して同じ16進値を持つ方法があるかどうかを知りたいです。
注 1 : 最初に、16 進数とは関係のないバイナリ ファイルを読みました。データセットの比較のためだけに 16 進数を使用します。
注2 Base64、別名MIME、UTF-7などを使用する提案がありました。私の理解では、バイナリデータを取得してANSI文字セットにエンコードし、基本的に初期データを微調整します。ただし、バイナリ配列に保持している正確なデータを書き込む必要があるため、これは解決策ではありません。
byte[] byteArray = new byte[]{0x2f, 0x7a, 0x2d, 0x28};
byte[] bytesEncoded = Base64.encodeBase64(byteArray);
System.out.println("encoded value is " + new String(bytesEncoded ));//new data