所以Java中的“char”占用2个字节。(可以从这里验证。)
我有这个示例代码:
public class FooBar {
public static void main(String[] args) {
String foo = "€";
System.out.println(foo.getBytes().length);
final char[] chars = foo.toCharArray();
System.out.println(chars[0]);
}
}
输出结果如下:
3
€
我的问题是,Java如何将一个3字节字符放入char数据类型中?顺便说一句,我正在使用参数“-Dfile.encoding=UTF-8”运行应用程序。
另外,如果我进一步编辑代码并添加以下语句:
File baz = new File("baz.txt");
final DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream(baz));
dataOutputStream.writeChar(chars[0]);
dataOutputStream.flush();
dataOutputStream.close();
最终的文件"baz.txt"将只有2个字节,即使我将其视为UTF-8文件,它也不会显示正确的字符。
编辑2: 如果我使用UTF-16 BE编码打开文件"baz.txt",在我的文本编辑器中我将能够很好地看到€字符,这是有道理的。