Inv*_*r53 11 java character-encoding file-encodings
问题:我有一个包含特殊字符的字符串,我将其转换为字节,反之亦然..转换在Windows上正常工作但在linux上特殊字符未正确转换.在Linux上的默认字符集是使用Charset看到的UTF-8. defaultCharset.getdisplayName()
但是如果我使用选项-Dfile.encoding = ISO-8859-1在linux上运行它可以正常工作..
如何使用UTF-8默认字符集使其工作,而不在unix环境中设置-D选项.
编辑:我使用jdk1.6.13
编辑:代码段与cs ="ISO-8859-1"一起使用; 或者cs ="UTF-8"; 在胜利但不在Linux
String x = "½";
System.out.println(x);
byte[] ba = x.getBytes(Charset.forName(cs));
for (byte b : ba) {
System.out.println(b);
}
String y = new String(ba, Charset.forName(cs));
System.out.println(y);
Run Code Online (Sandbox Code Playgroud)
〜关于黛德
McD*_*ell 10
你的角色可能被编译过程破坏了,你最终会在你的类文件中找到垃圾数据.
如果我使用选项-Dfile.encoding = ISO-8859-1在linux上运行它可以正常工作..
简而言之,不要使用-Dfile.encoding = ...
String x = "½";
Run Code Online (Sandbox Code Playgroud)
由于U + 00bd(½)将由不同编码中的不同值表示:
windows-1252 BD
UTF-8 C2 BD
ISO-8859-1 BD
Run Code Online (Sandbox Code Playgroud)
...您需要告诉编译器您的源文件编码为:
javac -encoding ISO-8859-1 Foo.java
Run Code Online (Sandbox Code Playgroud)
现在我们来看看这个:
System.out.println(x);
Run Code Online (Sandbox Code Playgroud)
作为PrintStream,这将在发出字节数据之前将数据编码为系统编码.像这样:
System.out.write(x.getBytes(Charset.defaultCharset()));
Run Code Online (Sandbox Code Playgroud)
这可能会或可能不会像您期望的那样在某些平台上运行 - 字节编码必须与控制台期望字符正确显示的编码相匹配.
| 归档时间: |
|
| 查看次数: |
26975 次 |
| 最近记录: |