Java: как определить (и изменить?) Кодировку System.console?
У меня есть программа, которая запускается на консоли, а ее Umlauts и другие специальные символы выводятся как? на компьютерах Mac. Вот простая тестовая программа:
public static void main( String[] args ) {
System.out.println("höhößüä");
System.console().printf( "höhößüä" );
}
На консоли Mac по умолчанию (с кодировкой UTF-8 по умолчанию) это печатает:
h?h????
h?h????
Но после ручной настройки кодировки терминала Mac на "Mac OS Roman", она правильно напечатала
höhößüä
höhößüä
Обратите внимание, что в системах Windows с использованием System.console() работает:
h÷h÷▀³õ
höhößüä
Итак, как мне сделать свою программу... rolleyes... "бегать везде"?
Ответы
Ответ 1
Эпага: посмотрите прямо здесь. Вы можете установить выходную кодировку в потоке печати - просто нужно определить или быть абсолютно уверенным в том, что установлено.
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
public class Test {
public static void main (String[] argv) throws UnsupportedEncodingException {
String unicodeMessage =
"\u7686\u3055\u3093\u3001\u3053\u3093\u306b\u3061\u306f";
PrintStream out = new PrintStream(System.out, true, "UTF-8");
out.println(unicodeMessage);
}
}
Чтобы определить консольную кодировку, вы можете использовать системную команду "locale" и проанализировать вывод, который - в немецкой системе UTF-8 выглядит так:
LANG="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_CTYPE="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_ALL=
Ответ 2
Попробуйте использовать следующий аргумент командной строки при запуске приложения:
-Dfile.encoding=utf-8
Это изменяет кодировку по умолчанию JVM для операций ввода-вывода.
Вы также можете попробовать:
System.setOut(new PrintStream(System.out, true, "utf-8"));