Java→ Консольная кодировка в Java
Авг 13, 2011
Любой начинающий программист хоть раз, но сталкивался с проблемой вывода кириллицы на консоль. Пока вы выводите английские буквы, вас она не коснется, но стоит вам попытаться вывести русский текст, как в ответ получите нечитабельные кракозябры на консоли.
Дело в том, что Java по умолчанию использует кодировку UTF-16, которая для каждого символа выделяет 2 байта, в то время как консоль Windows каждому символу отводит 1 байт и использует устаревшую кодировку cp866. Почему устаревшую? Да потому, что UTF-16(Юникод) поддерживает 65536 символов, а cp866 всего 256 символов, как говориться — почувствуй разницу.
Выбор UTF-16 очевиден: java универсальный язык, который должен также хорошо работать как у англичанина, так и у китайца. А как вы знаете, китайский алфавит состоит не из 26 символов, и отнюдь не из 256 символов. Как вы могли заметить, такая проблема, в большинстве случаев, возникает у пользователей операционной системы семейства Windows.
Решение
Самое простое решение, которое я встречал, это дописать в программу следующий код:
System.setOut(new PrintStream(System.out, true, "cp866")); System.setErr(new PrintStream(System.err, true, "cp866"));
Таким образом, мы создаем новый поток стандартного вывода и поток вывода ошибок из стандартных потоков, с нужной нам кодировкой cp866, а затем устанавливаем их как стандартные потоки вывода. Необходимо также учесть, что этот код должен идти до того, как вы начнете выводить русский текст на консоль, используя System.out.println()
.
Похожие статьи: