Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > Русификация консоли в Windows |
Автор: LSD 1.8.2007, 15:16 | ||||||
При запуске программы в консоли Windows, часто бывает проблема с отображением русских букв. В данной ситуации возможно два решения - "исправить" консоль в Windows или "исправить" программу. Проблема эта возникает из-за того, что умолчальная кодировка Windows - windows-1251, а в консоли Windows используется кодировка Cp866. Возможно 4 разных пути решения данной проблемы. Первый вариант, самый предпочтительный и не требует менять код, так что подходит для любой программы. Запускаем консоль, щелкаем на заголовке окна и выбираем свойства. В свойствах на закладке Шрифт ставим шрифт Lucida Console и жмем ОК. Далее набираем в консоли ChCp 1251, в ответ получаем Текущая кодовая страница: 1251. Теперь запускаем Java программу и убеждаемся, что все работает. При желании можно написать bat-файл куда вставить ChCp 1251 и создать для этого файла ярлык, в свойствах которого прописать шрифт Lucida Console. Второй вариант - изменить умолчальную кодировку для Java программ. Менять исходный код программы тоже не требуется, но возможны некоторые побочные эффекты. Например FileWriter и все использующие его компоненты, будут писать файлы не в windows-1251, а в Cp866. Так же возможны проблемы с драйверами БД, которые по умолчанию ориентируются на системную кодировку. Чтобы изменить умолчальную кодировку для Java программ надо при запуске указать JVM параметр -Dfile.encoding=XXX, например так:
Третий вариант требует некоторого изменения исходного кода, надо при инициализации программы изменить PrintStream отвечающий за вывод в консоль, и настроить его на кодировку Cp866. УДобство этого метода состоит в том, что пользователю не надо ничего настраивать. Для этого в классе содержащем main() надо прописать:
Четвертый вариант доступен начиная с JDK 1.6. Для вывода в консоль использовать не стандартный поток вывода и ошибок, а специальный класс java.io.Console. Помимо правильного определения кодировки, этот класс обладает удобными методами для чтения данных из консоли:
|