后更新Linux和Java(1.6.0.13-> 1.6.0.45)之后,Java进程使用不同的文件编码(系统属性的file.encoding)错误的文件编码在JVM的Linux更新
新的操作系统版本。不幸的是,我不知道以前的版本了。但我可以告诉,更新出错了。我的Collegue首先使用x32操作系统版本进行了更新,然后我们重新安装了x64版本。
>uname -a
Linux 2.6.31.5-0.1-desktop #1 SMP PREEMPT 2009-10-26 15:49:03 +0100 x86_64 x86_64 x86_64 GNU/Linux
区域设置
>locale
LANG=en_US.ISO8859-1
LC_CTYPE=en_US.ISO8859-1
LC_NUMERIC="en_US.ISO8859-1"
LC_TIME="en_US.ISO8859-1"
LC_COLLATE="en_US.ISO8859-1"
LC_MONETARY="en_US.ISO8859-1"
LC_MESSAGES="en_US.ISO8859-1"
LC_PAPER="en_US.ISO8859-1"
LC_NAME="en_US.ISO8859-1"
LC_ADDRESS="en_US.ISO8859-1"
LC_TELEPHONE="en_US.ISO8859-1"
LC_MEASUREMENT="en_US.ISO8859-1"
LC_IDENTIFICATION="en_US.ISO8859-1"
LC_ALL=
测试程序
public class Test
{
public static void main(String[] args)
{
System.out.println(System.getProperty("file.encoding"));
}
}
如果我开始返回ANSI_X3.4-1968这个测试程序。在具有相同区域设置的其他机器上,它将返回ISO8859-1。即使我从显式环境变量开始,它仍然保持不变。唯一的工作解决方案是使用-Dfile.encoding选项。但我不想调整所有使用java的脚本(tomcat,maven,ant,hudson ....)。我想恢复旧的行为,即从Java系统区域设置定义中检索到Java程序中的文件编码。
>java Test
ANSI_X3.4-1968
>LANG=de_DE.ISO8859-1 java Test
ANSI_X3.4-1968
>java -Dfile.encoding=ISO8859-1 Test
ISO8859-1
至少C程序得到正确的编码和不使用ANSI_X3.4-1968
>idn --debug --quiet "a.de"
Charset `ISO-8859-1'.
....
有谁知道,如果有任何JVM的具体设置,可能OS或中迷路了java更新。
任何帮助表示赞赏。
2014-08-28
tejoe
+0
作为最后的手段,Java配置文件/环境变量('JAVA_OPTS')会自动读取并应用于每个JVM启动。如果您无法搜索并恢复原始编码,则可以通过这种方式为所有Java应用程序“永久”进行设置。 –
2014-08-28 12:37:51
+0
你能否对Java配置文件更具体些?我不知道。 JAVA_OPS似乎不起作用。 export JAVA_OPTS = -Dfile.encoding = ISO-8859-15 java测试 ANSI_X3.4-1968。这对于javac编译器设置无效,它也使用ANSI编码。 –
2014-08-28 14:06:16
+0
我不知道Linux中的配置文件位置,因为我使用Windows。对于'JAVA_OPTS',请参阅http://stackoverflow.com/questions/2011311/running-java-with-java-opts-env-variable –
2014-08-28 14:10:05