Java VM 如何确定其默认的 file.encoding?

Ken*_*Ken 5 java encoding macos

我在 Mac OS X 10.8(从终端)上运行 Java 程序,Java VMfile.encoding默认为“SJIS”。我什至尝试了一个很小的 ​​Java 程序,它只打印系统属性,这表明 Java VM 本身默认为 SJIS。(让我们面对现实吧,没有人喜欢 SJIS!)

我的终端设置为 UTF-8。我的 $LANG 没有设置,$LC_CTYPE 是“UTF-8”。AFAICT,任何环境变量或终端设置都没有“JIS”。

在 Mac OS X 上的 Java 上,它file.encoding从哪里获得价值?是否有我可以更改的系统设置以使用 UTF-8?我不想为每个应用程序和每个库指定这个,因为这介于“尴尬”和“不可能”之间,具体取决于程序。

我想我可以为此设置一个环境变量,但是我找不到任何影响 Java 的标准变量(如 $LANG)。

小智 1

您始终可以将此代码放入您最喜欢的 IDE 中的 java 类中

import java.nio.charset.Charset;
(...)
Charset.defaultCharset()
Run Code Online (Sandbox Code Playgroud)

然后按照defaultCharset()链接了解您的 JVM 实例将如何确定默认字符集。win 64b 热点 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;
}
Run Code Online (Sandbox Code Playgroud)

如您所知,您始终可以file.encoding在启动时设置..

java -Dfile.encoding=UTF-8 MyClass
Run Code Online (Sandbox Code Playgroud)

在你的情况下,SJIS似乎是指日本编码(MS Japan OS src)?我的意思是(srcSJIS时可能是默认值LANG=ja_JP.PCK