当我将String转换为字节数组并返回String时,我不会得到我开始的结果。这是为什么?
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
答案 0 :(得分:1)
您似乎缺乏对char
和byte
之间关系的基本理解。
它们不可互换。
当您有文本时,您有一个Unicode代码点流。碰巧在Java中,char
用于此目的。但是对于解码和编码的过程,它们很可能是载体鸽。
所以,你有文字,你有字节。你需要做的是能够将这个文本,即这个载体鸽子序列(或char
s,并不重要)转换为字节(即编码),然后字节回到文本(解码)。在Java中,这两个操作都可以通过一个名为Charset
的类来获得;对于在幕后执行这些操作的类,这些是CharsetEncoder
和CharsetDecoder
。
因此你的程序无法正常工作。此外,当您使用:
someString.getBytes()
您将默认字符集用于JRE / OS组合。 不要这样做。在编码或解码时始终指定字符集。