Question Comment la machine virtuelle Java détermine-t-elle son fichier.encodage par défaut?


J'exécute un programme Java sur Mac OS X 10.8 (à partir du terminal) et les machines virtuelles Java file.encoding est par défaut à "SJIS". J'ai même essayé un minuscule programme Java qui ne fait qu'imprimer les propriétés du système, ce qui montre que la machine virtuelle Java elle-même utilise SJIS par défaut. (Et avouons-le, personne n'aime SJIS!)

Mon terminal est réglé sur UTF-8. Mon $ LANG n'est pas défini et $ LC_CTYPE est "UTF-8". Aucune variable environnementale ou réglage du terminal ne contient "JIS", AFAICT.

Sur Java sous Mac OS X, où se trouve le file.encoding valeur de? Y a-t-il un paramètre système que je peux modifier pour qu'il utilise UTF-8? Je ne veux pas avoir à spécifier ceci par application et par bibliothèque, car cela se situe entre "maladroit" et "impossible", selon le programme.

Je suppose que je suis d'accord avec la définition d'une variable d'environnement pour cela, mais je ne trouve aucune variable standard (comme $ LANG) qui affecte Java.


3
2017-12-13 19:44


origine




Réponses:


Vous pouvez toujours mettre ce code dans une classe Java dans votre IDE préféré

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

Puis suivez defaultCharset() lien pour comprendre comment votre instance JVM va déterminer le jeu de caractères par défaut. Exemple sur le hotspot 64b win 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;
}

Comme vous le savez, vous pouvez toujours définir file.encoding au démarrage ..

java -Dfile.encoding=UTF-8 MyClass

Dans ton cas, SJIS semble se référer à un encodage du Japon (MS Japan OS src)? je veux dire SJIS pourrait être la valeur par défaut lorsque LANG=ja_JP.PCK (src)


1
2018-02-19 13:33





Je suis sûr que cela est spécifique à la mise en œuvre de la JVM, mais j'ai pu "influencer" le fichier.encodage par défaut de ma JVM en exécutant: exporter LC_ALL = en_US.UTF-8 (exécution de la version java = 1.7.0_80 sous OS = Ubuntu 12.04)

tout le crédit va à http://www.philvarner.com/2009/10/24/unicode-in-java-default-charset-part-4/


-1
2017-07-09 22:04



S'il vous plaît citer les informations pertinentes de votre lien - Ramhound