gpt4 book ai didi

java - 将带有二进制数据的 byte[] 转换为 String

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:45:20 26 4
gpt4 key购买 nike

我有二进制格式的数据(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 下发生了什么,是否有办法将二进制数据转换为 String 并具有相同的十六进制值。

注意1:最初我读的是一个二进制文件,与十六进制无关。我使用十六进制只是为了比较数据集。

注释 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

最佳答案

为了安全将任意二进制数据转换为文本,您应该使用十六进制或 base64 之类的东西。 UTF-8 等编码旨在将任意文本 数据编码为字节,而不是将任意二进制 数据编码为文本。区别在于源数据是什么。

我强烈建议为此使用库。例如,使用 Guava :

String hex = BaseEncoding.base16().encode(byteArray);
// Store hex in the database in the text field...
...
// Get hex from the database from the text field...
byte[] binary = BaseEncoding.base16().decode(hex);

(当然也可以使用其他库,例如 Apache Commons Codec。)

或者,将二进制数据保存到 Access 中为二进制数据设计的字段中,而不是将其完全转换为文本。

关于java - 将带有二进制数据的 byte[] 转换为 String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28233750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com