Wie ermittelt die Java-VM ihre Standarddatei.


4

Ich führe ein Java-Programm unter Mac OS X 10.8 (vom Terminal aus) aus und die Java- file.encodingVMs verwenden standardmäßig "SJIS". Ich habe sogar ein winziges Java-Programm ausprobiert, das nichts anderes tut, als die Systemeigenschaften auszudrucken, und das zeigt, dass die Java-VM selbst standardmäßig SJIS verwendet. (Und seien wir ehrlich, niemand mag SJIS!)

Mein Terminal ist auf UTF-8 eingestellt. Mein $ LANG ist nicht gesetzt und $ LC_CTYPE ist "UTF-8". Keine Umgebungsvariable oder Terminaleinstellung enthält "JIS", AFAICT.

Woher bezieht Java unter Mac OS X den file.encodingWert? Gibt es eine Systemeinstellung, die ich ändern kann, damit UTF-8 verwendet wird? Ich möchte diese Angaben nicht pro Anwendung und pro Bibliothek machen müssen, da sie je nach Programm zwischen "umständlich" und "unmöglich" liegen.

Ich nehme an, dass ich eine Umgebungsvariable dafür festlegen kann, aber ich kann keine Standardvariablen (wie $ LANG) finden, die Java betreffen.

Antworten:


1

Sie können diesen Code jederzeit in eine Java-Klasse in Ihrer bevorzugten IDE einfügen

import java.nio.charset.Charset;
(...)
Charset.defaultCharset()

Folgen Sie dann dem defaultCharset()Link, um zu verstehen, wie Ihre JVM-Instanz den Standardzeichensatz ermittelt. Beispiel auf 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;
}

Wie Sie wissen, können Sie immer file.encodingbeim Start einstellen ..

java -Dfile.encoding=UTF-8 MyClass

In Ihrem Fall SJISscheint sich auf eine Japan-Codierung (MS Japan OS src ) zu beziehen ? Ich meine, SJISkönnte Standardwert sein, wenn LANG=ja_JP.PCK( src )


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.