我有一个字节数组b:
b = [-98, -99]
我需要将这段数据传递给一个函数。该函数采用String(这是不可更改的)。如何让Java将b中的原始二进制数据解释为字符串而不更改b
中的任何位编辑
这不是重复:
Converting byte array to String (Java)
因为,数组b由位[1001 1110 1001 1101]或[9E9D]组成。如果我使用
String str = new String(b, "Cp1252")
Cp1252编码没有位1001 1101或9D的序列值。所以这个函数导致str =“ž?”。二进制形式的是[1001 1110 0011 1111]或[9E3F]。请注意,该函数已经改变了我的位,这实际上破坏了我的数据。
我认为这将使用重新解释转换在C ++中完成,但在java中不存在这样的东西。提前谢谢。
答案 0 :(得分:1)
您可能需要new String(b, "charset"));
之类的内容,其中charset
将替换为您要使用的编码。我建议使用UTF-8
,但您的值不是UTF-8。
答案 1 :(得分:0)
你不能用任意值的任意字节来做这个,因为没有允许的编码,我假设你无法控制数据的解码。如果你做可以控制解码和编码,你可以编写自己的Charset,这样你就可以将数据映射到普通的Java字符串中,然后从普通的Java字符串中复制出来,编码为UTF- 16。编码:
String str = new String(byteBuffer, MyCharSet);
解码它:
byte[] byteBuffer = str.getBytes(MyCharSet);