我有一些被编码为 UTF-8 字符串的二进制数据。如何从字符串中获取原始数据?二进制数据没有特定的字符编码,所以我不确定什么转换会给我我想要的。考虑以下最小示例:
byte[] input = { -84 };
String s = new String(input, Charset.forName("UTF8"));
System.out.println(Arrays.toString(s.getBytes())); // prints [63]
System.out.println(Arrays.toString(s.getBytes("UTF8"))); // prints [-17, -65, -67]
我正在寻找一种可以返回 [-84]
的方法。
最佳答案
一般来说,你不能。并非所有字节序列都是有效的 UTF-8。因此,数据可能会在(容错)byte[]->char[]->byte[]
中损坏。流程。
您可以使用 ISO_8859_1
不过,它是 byte<->char
的一对一映射。
这并不是一个罕见的问题。许多老化的协议(protocol),例如 HTTP,都是以 ISO_8859_1
开头的。记住的字符,或者 C 的 char
类型。较新版本的规范会说它基于“八位位组”,又称“字节”。如果您的 API 使用字符串来表示它们,ISO_8859_1
通常是更好的选择。
关于java - 如何获取用于构造 String 的 byte[]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30699429/