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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Русификация консоли в Windows, проблема с отображение русских букв 
:(
    Опции темы
LSD
Дата 1.8.2007, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15666
Регистрация: 24.3.2004

Репутация: 206
Всего: 534



При запуске программы в консоли 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);



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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