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.

Ken
quelle

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 )

boly38
quelle
-1

Ich bin mir sicher, dass dies spezifisch für die JVM-Implementierung ist, aber ich konnte die Standardcodierung meiner JVM-Datei "beeinflussen", indem ich Folgendes ausführte: export LC_ALL = en_US.UTF-8 (Java-Version = 1.7.0_80 unter OS = Ubuntu 12.04)

Der gesamte Kredit geht an http://www.philvarner.com/2009/10/24/unicode-in-java-default-charset-part-4/

mike32b
quelle
Bitte zitieren Sie die relevanten Informationen aus Ihrem Link
Ramhound