我有二进制格式的数据(hex: 80 3b c8 87 0a 89
),我需要将其转换为字符串,以便通过 Jackcess 将二进制数据保存在 MS Access 数据库中。我知道,我不打算在 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
以及是否有一种方法可以将二进制数据转换为字符串并具有相同的十六进制值。
Note 1:最初我读取了一个与十六进制无关的二进制文件。我使用十六进制只是为了比较数据集。
Note 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