0

我有一个字节数组b:

b = [-98, -99]

我需要将这段数据传递给一个函数。该函数接受一个字符串(这是不可更改的)。如何让 Java 将 b 中的原始二进制数据解释为字符串而不更改 b 中的任何位

编辑

这不是重复:

将字节数组转换为字符串(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 中不存在这样的东西。提前致谢。

4

2 回答 2

1

您可能想要像new String(b, "charset"));wherecharset被您想要使用的编码所取代的东西。我建议UTF-8,除非您的值不是有效的 UTF-8。

于 2013-05-30T23:00:00.343 回答
0

您不能使用任何值的任意字节来执行此操作,因为没有允许这样做的编码,并且我假设您无法控制数据的解码。如果您确实可以控制解码和编码,则可以编写自己的字符集,以便可以将数据映射到编码为 UTF-16 的普通 Java 字符串或从其映射出。对其进行编码:

String str = new String(byteBuffer, MyCharSet);

解码它:

byte[] byteBuffer = str.getBytes(MyCharSet);
于 2013-05-30T23:16:49.140 回答