【发布时间】:2016-06-17 03:19:45
【问题描述】:
我有一个使用 mvn exec:java 运行的程序(我的主文件以 utf-8 编码,系统的默认字符集是 windows-1252)
System.out.println(Charset.defaultCharset()); //print windows-1252
String s = "éàè";
System.out.println(new String(s.getBytes(Charset.forName("UTF-8")))); //OK Print éàè
System.out.println(new String(s.getBytes(Charset.forName("windows-1252")))); //Not OK Print ▒▒▒
我不明白为什么第一次打印有效,根据文档 getBytes 使用给定的字符集将字符串编码为字节序列,并且字符串构造函数构造一个新字符串使用平台的默认字符集解码指定的字节数组
所以第一次打印以 UTF-8 编码,然后使用平台的默认字符集 windows-1252 进行解码,这怎么可能?它无法使用平台字符集 windows-1252 解码编码的 utf-8 字节数组。
第二个打印错误,我不明白为什么。由于我的文件以 utf-8 编码并且平台字符集是 windows-1252,我的意图是使用 windows-1252 字符集对字符串进行编码,因此我调用 s.getBytes(Charset.forName("windows-1252")) 然后使用先前的结果创建一个字符串,但它不起作用
【问题讨论】:
-
试试
PrintStream out = new PrintStream(System.out, true, "windows-1252"); out.println(s); -
附带说明,MS-DOS 默认字符集不是 1252,请参见此处:docs.oracle.com/javase/7/docs/technotes/guides/intl/…
-
PrintStream out = new PrintStream(System.out, true, "windows-1252");不起作用,但 PrintStream out = new PrintStream(System.out, true, "utf-8");没有
-
@Berger 你是对的,我正在使用 MinGW 执行我的程序,使用 MS-DOS 程序可以正常工作
标签: java encoding utf-8 character-encoding