3

Я запускаю программу на Java в Mac OS X 10.8 (из терминала), и file.encoding на виртуальной машине Java по умолчанию имеет значение "SJIS". Я даже попробовал крошечную Java-программу, которая ничего не делает, кроме распечатки системных свойств, и это показывает, что сама Java VM по умолчанию использует SJIS. (И давайте посмотрим правде в глаза, никто не любит SJIS!)

Мой терминал настроен на UTF-8. Мой $ LANG не установлен, а $ LC_CTYPE - "UTF-8". Никакая переменная окружения или настройка терминала нигде не содержат "JIS", AFAICT.

В Java на Mac OS X откуда он получает значение file.encoding ? Могу ли я изменить настройки системы, чтобы она использовала UTF-8? Я не хочу указывать это для каждого приложения и для библиотеки, потому что это где-то между "неудобным" и "невозможным", в зависимости от программы.

Я предполагаю, что я в порядке с установкой переменной среды для этого, но я не могу найти какие-либо стандартные переменные (например, $ LANG), которые влияют на Java.

2 ответа2

1

Вы всегда можете поместить этот код в Java-класс в вашей любимой IDE

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

Затем перейдите по 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;
}

Как вы знаете, вы всегда можете установить file.encoding при запуске ..

java -Dfile.encoding=UTF-8 MyClass

В вашем случае, SJIS похоже, относится к кодировке Японии (MS Japan OS src)? Я имею в виду SJIS может быть значением по умолчанию, когда LANG=ja_JP.PCK (src)

-1

Я уверен, что это зависит от реализации JVM, но я смог "повлиять" на файл file.encoding моего JVM по умолчанию, выполнив: export LC_ALL = en_US.UTF-8 (работает версия Java = 1.7.0_80 в OS = Ubuntu 12.04)

вся заслуга принадлежит http://www.philvarner.com/2009/10/24/unicode-in-java-default-charset-part-4/

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .