java - 如何获取用于构造 String 的 byte[]?

标签 java string character-encoding arrays

我有一些被编码为 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/

相关文章:

Java for Web - 编码错误的多部分/表单数据文件

java - 在 Java 中查找内核数

regex - 替换 Pandas 出生日期的前几位

c - 尝试从 C 中的字符串中删除子字符串,但始终失败

java - 如何从 SQLite 数据库 (android) 检索特定值并在可编辑 TextView 中显示

php - jquery post向数据库添加错误的字符集

c - 如何在 C 中从八进制 ISO-8859-1 转储 utf8

java - xml 文件不更新。这是什么原因呢?

java - 带有 csv 输入文件的 jMeter maven 插件

java - Spring JPA 配置 IllegalArgumentException : No persistence unit with name found