当我将字符串转换为字节数组并返回字符串时,我没有得到开始时的结果。这是为什么?
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
最佳答案
您似乎缺乏对 char
和 byte
之间关系的基本理解。
它们不可互换。
当你有文本时,你就有了一个 Unicode 代码点流。恰好在 Java 中,char
就是用于此目的。但对于解码和编码的过程来说,它们很可能是信鸽。
所以,你有文本,也有字节。您需要做的是能够将此文本(也称为信鸽序列(或 char
,无所谓))转换为字节(即编码) ,然后字节返回文本(即解码)。在 Java 中,这两种操作都可以通过一个称为 Charset
的类来实现;至于在幕后执行这些操作的类,它们是 CharsetEncoder
和 CharsetDecoder
。
因此你的程序无法运行。另外,当您使用:
someString.getBytes()
您使用 JRE/OS 组合的默认字符集。 不要这样做。编码或解码时始终指定字符集。
关于java - 转换 String -> byte[] -> String,而不是恒等映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29119789/