Модераторы: LSD, powerOn, AntonSaburov, jk1
  

Поиск:

Добавить материал
 

Русификация консоли в Windows
LSD
Репутация: 206
Всего: 531

Профиль
Быстрая цитата Цитата
Теги:
При запуске программы в консоли 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, например так:
Код
java -Dfile.encoding=Cp866 -jar program.jar


Третий вариант требует некоторого изменения исходного кода, надо при инициализации программы изменить PrintStream отвечающий за вывод в консоль, и настроить его на кодировку Cp866. УДобство этого метода состоит в том, что пользователю не надо ничего настраивать. Для этого в классе содержащем main() надо прописать:
Код
static
{
  try
  {
    if(System.getProperty("os.name").toLowerCase().contains("windows"))
    {
      PrintStream out = new PrintStream(System.out, true, "Cp866");
      PrintStream err = new PrintStream(System.err, true, "Cp866");
      System.setOut(out);
      System.setErr(err);
    }
  }
  catch(UnsupportedEncodingException e)
  {
    System.err.println("Couldn't change console encoding " + e);
  }
}


Четвертый вариант доступен начиная с JDK 1.6. Для вывода в консоль использовать не стандартный поток вывода и ошибок, а специальный класс java.io.Console. Помимо правильного определения кодировки, этот класс обладает удобными методами для чтения данных из консоли:
Код
Console con = System.console();
String login = con.readLine("login: ");
char[] password = con.readPassword("password: ");
con.printf("Hello %s!", login);
  
 
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0631 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.