Баг або фіча в Java Виведення кириличних символів у консоль

Є багато особливостей, про які бажано знати, програмуючи на Java, навіть якщо Ви програміст-початківець. Під катом я розповім як вивести кирилиці в консоль Windows і наочно це продемонструю. Почнемо з простого.

Їх у Java 8:

  • boolean;
  • byte, char, short, int, long;
  • float, double.

Char- це символьний тип даних. Змінна такого типу займає 2 байти пам'яті, оскільки зберігається в кодуванні unicode. Зі змінними цього типу можна проводити тільки операції присвоювання, зате різними способами. Найпростіший їх виглядає так: c = 'b'; Символ можна подати також у вигляді коду, записаного у восьмеричній системі числення: c = '\077'; Де 077 – це обов'язково тризначне число, не більше ніж 377 (=255 у десятковій системі числення). Або в шістнадцятковій системі числення наступним чином: c = '12a4'; Крім того, існують спеціальні символи, такі як знак абзацу, розрив сторінки та ін. Знак абзацу запишеться, наприклад, так: c = '\n'; Не треба перераховувати їх тут. За потреби завжди можна заглянути до довідника.

Тепер увага. Кодуванням за промовчанням середовища програмування Java є Latin-1. Однак, при виведенні в потік System.out символи перетворюються на стандартне кодування для операційної системи. Так для українськомовної локалізації кодуванням за замовчуванням є Windows-1251, для linux такою буде UTF-8. Однак за задумом Microsoft вирішили для консолі Windows використовувати кодування CP866.

Відповідно висновок: для коректного відображення кириличних символів консолі потрібно виводити символи в кодуванні Cp866!

Цеможна зробити наступним способом:

import java.io.PrintStream; import java.io.UnsupportedEncodingException;

public class Hello < public static void main(String[] args) throws UnsupportedEncodingException < /*Може виникнути виняток типу UnsupportedEncodingException*/ String x = "Привіт, світ."; //Це рядок, який ми виводитимемо на екран PrintStream printStream = new PrintStream(System.out, true, "cp866"); /*Створюємо новий потік виводу, який автоматично перетворюватиме символи в кодування Cp866*/ printStream.println(x); > > Збережемо отриманий код у файл Hello.java. Далі створимо Hello.bat файл такого змісту: javac Hello.java java -cp . Hello pause І помістимо його в одну папку з файлом Hello.java. Повинно вийти приблизно так: Далі запускаємо отриманий Hello.bat файл і вуаля, у нас утворився файл Hello.class у тій же директорії, а на екран вивелося повідомлення «Привіт, світ. » у кодуванні Cp866. Для того, щоб дізнатися, яке кодування в даний момент використовується в консолі, потрібно набрати там «chcp». А для того, щоб змінити кодування консолі, потрібно набрати "chcp" наприклад "chcp 1251". Продемонструю використання цієї команди: Зауваження: якщо у Вас не знаходить команду javac, то заходимо (для Windows 7) "Мій комп'ютер" - "Властивості" - "Додаткові параметри системи" - "Змінні середовища", знаходимо " Системні змінні» і в змінну Path додаємо рядок, куди встановлено JDK, наприклад «C: Program Files Java Jdk1.7.0_25 bin» - за замовчуванням.