【发布时间】:2020-02-07 06:11:18
【问题描述】:
我编写了我认为非常简单、非常基本的代码来吐出 Unicode 字符以及底层字节。
public class UnicodeTesting {
public static void main(String[] args) {
System.out.println(System.getProperty("java.version"));
String header = "\u2554\u2550";
for(byte b : header.getBytes()) {
System.out.printf("%02X ", b);
}
System.out.println();
System.out.println(header);
}
}
当我在 OnlineGDB.com 上运行这段代码时,我得到了我期望的输出。
1.8.0_201
E2 95 94 E2 95 90
╔═
但是,当我在本地的 Eclipse IDE 中运行完全相同的代码时,我得到了非常不同的结果:
1.8.0_131
3F 3F
??
为什么会这样?
如果我在 Eclipse 方面编辑代码,我至少可以通过强制 getBytes 方法使用 UTF-8 编码来获得我期望的字节值:
import java.io.UnsupportedEncodingException;
public class UnicodeTesting2 {
public static void main(String[] args) throws UnsupportedEncodingException {
System.out.println(System.getProperty("java.version"));
String header = "\u2554\u2550";
for(byte b : header.getBytes("UTF-8")) {
System.out.printf("%02X ", b);
}
System.out.println();
System.out.println(header);
}
}
1.8.0_131
E2 95 94 E2 95 90
??
(我假设我的控制台根本不支持这些字符,所以我不担心它们会出错)
但这并不能解释为什么这两种环境中程序的文字行为不同,在一种环境中默认为 UTF-8,但在 Eclipse 中默认为 ASCII(我假设)。
【问题讨论】:
标签: java unicode character-encoding