Como o Java VM determina seu file.encoding padrão?

3

Estou executando um programa em Java no Mac OS X 10.8 (a partir do Terminal), e o file.encoding da Java VM é padronizado como "SJIS". Eu até tentei um minúsculo programa em Java que não faz nada além de imprimir as propriedades do sistema, e isso mostra que a própria Java VM está assumindo como padrão o SJIS. (E vamos encarar isso, ninguém gosta de SJIS!)

Meu terminal está configurado para UTF-8. Meu $ LANG não está definido e $ LC_CTYPE é "UTF-8". Nenhuma variável de ambiente ou configuração de terminal tem "JIS" em qualquer lugar, AFAICT.

Em Java no Mac OS X, de onde obtém o valor file.encoding ? Existe uma configuração do sistema que eu possa mudar para que ele use UTF-8? Eu não quero ter que especificar isso por aplicativo e por biblioteca, porque isso é algo entre "inábil" e "impossível", dependendo do programa.

Suponho que estou OK ao definir uma variável de ambiente para isso, mas não consigo encontrar nenhuma variável padrão (como $ LANG) que afete o Java.

    
por Ken 13.12.2012 / 20:44

2 respostas

1

Você sempre pode colocar esse código em uma classe java no seu IDE favorito

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

Em seguida, siga o link defaultCharset() para entender como sua instância da JVM irá determinar o charset padrão. Exemplo no 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;
}

Como você sabe, você sempre pode definir file.encoding na inicialização.

java -Dfile.encoding=UTF-8 MyClass

No seu caso, SJIS parece referir-se a uma codificação do Japão (MS Japan OS src )? Quero dizer SJIS poderia ser o valor padrão quando LANG=ja_JP.PCK ( src )

    
por 19.02.2015 / 14:33
-1

Tenho certeza de que isso é específico da implementação da JVM, mas consegui "influenciar" o arquivo padrão da minha JVM. codificando executando: export LC_ALL = en_US.UTF-8 (executando a versão java = 1.7.0_80 no SO = Ubuntu 12.04)

todo o crédito vai para link

    
por 10.07.2016 / 00:04