即使使用 UTF-8,为什么 ¿ 在 Windows 和 Linux 中显示不同?

2023-11-30

为什么 Linux 和 Windows 中显示的内容不同?

System.out.println(new String("¿".getBytes("UTF-8"), "UTF-8"));

在 Windows 中:

¿

在Linux中:

¿


System.out.println() 以系统默认编码输出文本,但控制台根据其自己的编码(或“代码页”)设置解释该输出。在 Windows 机器上,两种编码似乎匹配,但在 Linux 机器上,输出显然是 UTF-8,而控制台将其解码为单字节编码(如 ISO-8859-1)。或者,正如 Jon 建议的那样,源文件被保存为 UTF-8 并且javac将其读作其他内容,这个问题可以通过使用 Unicode 转义来避免。

当您需要输出 ASCII 文本以外的任何内容时,最好的选择是使用适当的编码将其写入文件,然后使用文本编辑器读取该文件 - 控制台太有限且太依赖系统。顺便说一下,这段代码:

new String("¿".getBytes("UTF-8"), "UTF-8")

...对输出没有影响。所做的就是将字符串的内容编码为字节数组,然后再次解码,再现原始字符串——这是一个昂贵的无操作。如果要以特定编码输出文本,则需要使用 OutputStreamWriter,如下所示:

FileOutputStream fos = new FileOutputStream("out.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

即使使用 UTF-8,为什么 ¿ 在 Windows 和 Linux 中显示不同? 的相关文章

随机推荐