我有一个 Java 应用程序,它使用InputStreamReader
. 它从其getEncoding
方法中报告“Cp1252”:
/* java.net. */ Socket Sock = ...;
InputStreamReader is = new InputStreamReader(Sock.getInputStream());
System.out.println("Character encoding = " + is.getEncoding());
// Prints "Character encoding = Cp1252"
这不一定与系统报告的代码页相匹配。例如:
C:\>chcp 活动代码页:850
应用程序可能会收到字节 0x81,它在代码页 850 中表示字符ü
。该程序使用代码页 1252 解释该字节,该代码页没有定义该值的任何字符,因此我得到一个问号。
通过在启动应用程序的批处理文件中添加另一个命令行选项,我能够为使用代码页 850 的客户解决此问题:
java.exe -Dfile.encoding=Cp850 ...
但当然,并不是我的所有客户都使用代码页 850。如何让 Java 使用与底层 Windows 系统兼容的代码页?我的偏好是我可以将其放入批处理文件中,而 Java 代码保持不变:
编码=... java.exe -Dfile.encoding=%ENC% ...