Ran*_*yaa 2 java utf-8 character-encoding
为什么以下在Linux与Windows中显示不同?
System.out.println(new String("¿".getBytes("UTF-8"), "UTF-8"));
Run Code Online (Sandbox Code Playgroud)
在Windows中:
¿
在Linux中:
一个
Ala*_*ore 15
System.out.println()以系统默认编码输出文本,但控制台根据自己的编码(或"代码页")设置解释该输出.在您的Windows机器上,两个编码似乎匹配,但在Linux机器上,输出显然是UTF-8,而控制台将其解码为像ISO-8859-1这样的单字节编码.或者,正如Jon建议的那样,源文件被保存为UTF-8并将javac其作为其他东西读取,这是一个可以通过使用Unicode转义来避免的问题.
当您需要输出除ASCII文本以外的任何内容时,最好的办法是使用适当的编码将其写入文件,然后使用文本编辑器读取文件 - 控制台太有限且与系统有关.顺便说一句,这段代码:
new String("¿".getBytes("UTF-8"), "UTF-8")
Run Code Online (Sandbox Code Playgroud)
......对输出没有影响.所有这一切都是将字符串的内容编码为字节数组并再次解码,再现原始字符串 - 一个昂贵的无操作.如果要以特定编码输出文本,则需要使用OutputStreamWriter,如下所示:
FileOutputStream fos = new FileOutputStream("out.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
Run Code Online (Sandbox Code Playgroud)
不确定问题究竟在哪里,但值得注意的是
¿(0xc2,0xbf)
是使用UTF-8编码的结果
为0xBF,
这是¿的Unicode代码点
因此,在linux的情况下,输出不会显示为utf-8,而是显示为单字节字符串
| 归档时间: |
|
| 查看次数: |
2929 次 |
| 最近记录: |