Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Вывод на консоль в Windows. Команда chcp




Вывод на консоль в Windows. Команда chcp

Большинство простых программ, написанных на Java выводят какие-либо данные на консоль. Вывод на консоль предоставляет возможность выбрать кодировку, в которой будут выводиться данные вашей программы. Запустить окно консоли можно нажав Пуск -> Выполнить, а затем ввести и запустить команду cmd. Вывод на консоль в Windows по умолчанию производится в кодировке Cp866. Чтобы узнать в какой кодировке выводятся символы в консоли, следует набрать команду chcp. С помощью этой же команды можно задавать кодировку, в которой будут выводиться символы. Например chcp 1251. Фактически данная команда создана только для того, чтобы отражать или изменять номер текущей кодовой страницы консоли.

 

Кодовые страницы, отличные от Cp866 будут правильно отображаться только в полноэкранном режиме или в окне командной строки, использующем шрифты TrueType. Например:

Для того, чтобы увидеть последующий вывод, необходимо сменить текущий шрифт на шрифт True Type. Подведите курсор на заголовок окна консоли, щелкните правой кнопкой мыши и выберите опцию “Свойства”. В появившемся окне перейдите вкладку Шрифт и в ней выберите шрифт, напротив которого будет стоять двойная буква Т. Вам будет предложено сохранить данную настройку для текущего окна или для всех окон.

В итоге ваше окно консоли примет вид:

Таким образом, манипулируя данной командой можно видеть результаты вывода вашей программы в зависимости от кодировки.

Системные свойства file. encoding, console. encoding и вывод на консоль

Прежде чем затрагивать тему кодировок в исходных кодах программ следует четко уяснить, для чего предназначены, и как работают системные свойства file. encoding и console. encoding. Кроме этих системных свойств присутствует еще ряд других. Вывести на экран все текущие системные свойства можно с помощью следующей программы:

import java. io. *; import java. util. *; public class getPropertiesDemo { public static void main(String args[]) { String s; for (Enumeration e = System. getProperties(). propertyNames(); e. hasMoreElements(); ) { s = e. nextElement(). toString(); System. out. println(s+" =" +System. getProperty(s)); } } }

Пример вывода программы:

В операционной системе Windows по умолчанию file. encoding=Сp1251. Однако существует еще одно свойство console. encoding, которое указывает, в какой кодировке следует производить вывод на консоль. file. encoding указывает Java машине в какой кодировке следует считывать исходные коды программ, если кодировка не указана пользователем при компиляции. Фактически, данное системное свойство распространяется и на вывод с помощью System. out. println().

 

По умолчанию данное свойство не установлено. Эти системные свойства можно устанавливать и в вашей программе, однако, для нее это уже будет не актуально, поскольку виртуальная машина пользуется теми значениями, которые были считаны перед компиляцией и запуском вашей программы. Кроме того, как только ваша программа отрабатывает, системные свойства восстанавливаются. В этом можно убедиться, запустив дважды следующую программу.

/** * @author < a href=" mailto: zagrebin_v@mail. ru" > Victor Zagrebin < /a> */ public class SetPropertyDemo { public static void main(String[] args) { System. out. println(" file. encoding before=" +System. getProperty(" file. encoding" )); System. out. println(" console. encoding before=" +System. getProperty(" console. encoding" )); System. setProperty(" file. encoding", " Cp866" ); System. setProperty(" console. encoding", " Cp866" ); System. out. println(" file. encoding after=" +System. getProperty(" file. encoding" ));  System. out. println(" console. encoding after=" +System. getProperty(" console. encoding" )); } }

Установка данных свойств в программе необходима в тех случаях, когда оно используется в последующем коде до завершения работы программы.

Воспроизведем еще ряд типичных примеров, с проблемами, которыми сталкиваются программисты при выводе. Допустим, у нас есть следующая программа:

public class CyryllicDemo { public static void main(String[] args) { String s1 = " АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ"; String s2 = " абвгдежзийклмнопрстуфхцчшщьыъэюя"; System. out. println(s1); System. out. println(s1); } }

Кроме этой программы будем оперировать дополнительными факторами:

  • команда компиляции;
  • команда запуска;
  • кодировка исходного кода программы (устанавливается в большинстве текстовых редакторов);
  • кодировка вывода на консоль (Используется Cp866 по умолчанию или устанавливается с помощью команды chcp);
  • видимый вывод в окне консоли.

javac CyryllicDemo. java

java CyryllicDemo

Кодировка файла: Cp1251

Кодировка консоли: Cp866

Вывод:

└ ┴ ┬ ├ ─ ┼ ╞ ╟ ╚ ╔ ╩ ╦ ╠ ═ ╬ ╧ ╨ ╤ ╥ ╙ ╘ ╒ ╓ ╫ ╪ ┘ ▄ █ ┌ ▌ ▐ ▀

рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙ №√ ·¤■

javac CyryllicDemo. java

Кодировка файла: Cp866

Кодировка консоли: Cp866

Вывод:

CyryllicDemo. java: 5: warning: unmappable character for encoding Cp1251

String s1 = " АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧ? ЩЬЫЪЭЮЯ";

javac CyryllicDemo. java -encoding Cp866

java -Dfile. encoding=Cp866 CyryllicDemo

Кодировка файла: Cp866

Кодировка консоли: Cp866

Вывод:

АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ

абвгдежзийклмнопрстуфхцчшщьыъэюя

javac CyryllicDemo. java -encoding Cp1251

java -Dfile. encoding=Cp866 CyryllicDemo

Кодировка файла: Cp1251

Кодировка консоли: Cp866

Вывод:

АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ

абвгдежзийклмнопрстуфхцчшщьыъэюя

Особо следует обратить внимание на проблему “Куда делась буква Ш? ” из второй серии запусков. Еще внимательнее к этой проблеме следует относиться, если вы заранее не знаете, какой текст будет храниться в выводимой строке, и по наивности сделаете компиляцию без задания кодировки. Если у вас действительно в строке не будет буквы Ш, то компиляция выполнится удачно и запуск тоже. И на этом вы даже забудете, что упускаете мелочь (букву Ш), которая может потенциально встретиться в выводимой строке и неизбежно приведет к дальнейшим ошибкам.

В третьей и четвертой серии при компиляции и запуске используются ключи: -encoding Cp866 и -Dfile. encoding=Cp866. Ключ -encoding указывает, в какой кодировке следует считывать файл с исходным кодом программы. Ключ -Dfile. encoding=Cp866 указывает, в какой кодировке следует производить вывод.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...