转换 String -> byte[] -> String,而不是恒等映射
Convert String -> byte[] -> String, not identity map
当我将字符串转换为字节数组并返回字符串时,我没有得到开始时的结果。这是为什么?
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
s,无所谓)转换为字节(即 encoding) ,然后将字节返回到文本中(即 解码 )。在 Java 中,这两个操作都可以通过称为 Charset
的 class 获得;至于在幕后执行这些操作的 classes,它们是 CharsetEncoder
和 CharsetDecoder
.
因此您的程序无法运行。此外,当您使用:
someString.getBytes()
您为 JRE/OS 组合 使用了 默认字符集。 不要那样做。编码或解码时始终指定字符集。
当我将字符串转换为字节数组并返回字符串时,我没有得到开始时的结果。这是为什么?
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
s,无所谓)转换为字节(即 encoding) ,然后将字节返回到文本中(即 解码 )。在 Java 中,这两个操作都可以通过称为 Charset
的 class 获得;至于在幕后执行这些操作的 classes,它们是 CharsetEncoder
和 CharsetDecoder
.
因此您的程序无法运行。此外,当您使用:
someString.getBytes()
您为 JRE/OS 组合 使用了 默认字符集。 不要那样做。编码或解码时始终指定字符集。