我在 Mac OS X 10.8 上运行 Java 程序(从终端),Java VMfile.encoding
默认为“SJIS”。我甚至尝试了一个小型 Java 程序,它除了打印出系统属性外什么都不做,这表明 Java VM 本身默认为 SJIS。(让我们面对现实,没有人喜欢 SJIS!)
我的终端设置为 UTF-8。我的 $LANG 未设置,并且 $LC_CTYPE 为“UTF-8”。据我所知,没有任何环境变量或终端设置中包含“JIS”。
在 Mac OS X 上的 Java 中,它file.encoding
从哪里获取值?是否有我可以更改的系统设置以使其使用 UTF-8?我不想必须为每个应用程序和每个库指定这一点,因为这介于“尴尬”和“不可能”之间,具体取决于程序。
我想我可以为此设置一个环境变量,但我找不到任何影响 Java 的标准变量(例如 $LANG)。
答案1
你可以把这段代码放到你最喜欢的 IDE 的 Java 类中
import java.nio.charset.Charset;
(...)
Charset.defaultCharset()
然后点击defaultCharset()
链接,了解 JVM 实例如何确定默认字符集。win 64b hotspot JVM jdk 1.7 上的示例:
/**
* Returns the default charset of this Java virtual machine.
*
* <p> The default charset is determined during virtual-machine startup and
* typically depends upon the locale and charset of the underlying
* operating system.
*
* @return A charset object for the default charset
*
* @since 1.5
*/
public static Charset defaultCharset() {
if (defaultCharset == null) {
synchronized (Charset.class) {
String csn = AccessController.doPrivileged(
new GetPropertyAction("file.encoding"));
Charset cs = lookup(csn);
if (cs != null)
defaultCharset = cs;
else
defaultCharset = forName("UTF-8");
}
}
return defaultCharset;
}
如您所知,您始终可以file.encoding
在启动时设置..
java -Dfile.encoding=UTF-8 MyClass
在你的情况下,SJIS
似乎指的是日本编码(MS Japan OS源码)?我的意思SJIS
是,当LANG=ja_JP.PCK
(源码)
答案2
我确信这是特定于 JVM 实现的,但我能够通过执行以下操作来“影响”我的 JVM 的默认 file.encoding:export LC_ALL=en_US.UTF-8(在 OS = Ubuntu 12.04 上运行 java 版本 = 1.7.0_80)
所有的功劳都归功于http://www.philvarner.com/2009/10/24/unicode-in-java-default-charset-part-4/