【发布时间】:2013-07-28 13:41:12
【问题描述】:
如果我将一个字符转换为byte,然后再转换为char,该字符就会神秘地消失并变成别的东西。这怎么可能?
这是代码:
char a = 'È'; // line 1
byte b = (byte)a; // line 2
char c = (char)b; // line 3
System.out.println((char)c + " " + (int)c);
直到第 2 行一切正常:
在第 1 行中,我可以在控制台中打印“a”,它会显示“È”。
在第 2 行中,我可以在控制台中打印“b”,它会显示 -56,即 200,因为字节已签名。 200 是“È”。所以还是没问题的。
但是第 3 行出了什么问题? “c”变成别的东西,程序打印? 65480。那是完全不同的东西。
为了得到正确的结果,我应该在第 3 行写什么?
【问题讨论】:
-
A
byte是8 bit。char是16 bit。明白了吗? -
@RohitJain 一个字符——我的意思是一个 Unicode 代码点——可以占用两个字符或四个字节。此外,谁知道事物的规范化形式是什么?字符串
"È"本身可以包含一个或两个代码点,具体取决于它是分别处于规范化形式 C 还是 D。 -
char的两个字节与byte的一个字节在一般情况下是一个问题,但在这里,就其本身而言,这并不重要,因为 'È' 是低于 256 的代码点,所以可以存储在一个字节中。这里的问题是char是未签名的,而byte不是。将char转换为byte仅适用于 ASCII,因此不适用于 127 以上的代码点,就像这里一样。 -
这能回答你的问题吗? Char into byte? (Java)
标签: java encoding unicode utf-16