java - 转换 String -> byte[] -> String,而不是恒等映射

标签 java string arrays

当我将字符串转换为字节数组并返回字符串时,我没有得到开始时的结果。这是为什么?

String s1 = "" + (char)266;
String s2 = new String(s1.getBytes());
System.out.println(s1 + "|" + s2 + "|");
System.out.println((int)s1.charAt(0) + "|" + (int)s2.charAt(0));

输出:

?|?|
266 63

最佳答案

您似乎缺乏对 charbyte 之间关系的基本理解。

它们不可互换

当你有文本时,你就有了一个 Unicode 代码点流。恰好在 Java 中,char 就是用于此目的。但对于解码和编码的过程来说,它们很可能是信鸽。

所以,你有文本,也有字节。您需要做的是能够将此文本(也称为信鸽序列(或 char,无所谓))转换为字节(即编码) ,然后字节返回文本(即解码)。在 Java 中,这两种操作都可以通过一个称为 Charset 的类来实现;至于在幕后执行这些操作的类,它们是 CharsetEncoderCharsetDecoder

因此你的程序无法运行。另外,当您使用:

someString.getBytes()

您使用 JRE/OS 组合的默认字符集。 不要这样做。编码或解码时始终指定字符集。

关于java - 转换 String -> byte[] -> String,而不是恒等映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29119789/

相关文章:

java - 如何在 MigLayout 中显示 JLabel 省略号?

java - 为什么我的浏览器应用程序只能执行 Google 搜索而不访问 URL?

java - 在 SonarQube 分析过程中分析另一个文件(自定义规则)

python - 提取双引号之间的字符串

c++ - 将一个字符串插入另一个字符串......(sprintf)

Python:与 None 的字符串连接返回 None?

javascript - 在 python django 中通过 url 发送数组

java - 如何创建自定义 Android 单选按钮?

.net - 为什么 dotnet 1.1 在 ArrayList.GetRange 之后不能强制转换?

arrays - 合并两个 numpy 数组