Есть много особенностей, про которые желательно знать, программируя на Java, даже если Вы начинающий программист. Под катом я расскажу как вывести кириллические символы в консоль Windows и наглядно это продемонстрирую.
Начнем с простого.
Их в Java 8:
- boolean;
- byte, char, short, int, long;
- float, double.
Char — это символьный тип данных. Переменная такого типа занимает 2 байта памяти, так как хранится в кодировке unicode.
С переменными этого типа можно производить только операции присваивания, но зато различными способами. Самый простой из них выглядит так:
c = ‘b’;
Символ можно представить также в виде его кода, записанного в восьмеричной системе счисления:
c = ‘77’;
Где 077 – это обязательно трехзначное число, не большее чем 377 (=255 в десятичной системе счисления).
Или же в шестнадцатеричной системе счисления следующим образом:
c = ‘u12a4’;
Кроме того, существуют специальные символы, такие как знак абзаца, разрыв страницы и др. Знак абзаца запишется, например, так:
c = ‘
‘;
Не нужно перечислять их здесь. При необходимости всегда можно заглянуть в справочник.
Теперь внимание. Кодировкой по-умолчанию среды программирования 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 FilesJavajdk1.7.0_25in» — по умолчанию.
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.
Компиляция java-файла с кириллицей в имени из командной строки. При выводе ошибок выводятся иероглифы. Как-то можно решить?
2 ответа 2
В консоли ( cmd.exe ) перед вызовом компилятора переключите кодовую страницу командой
Достаточно сделать это один раз при каждом запуске консоли. javac в русскоязычной Windows выводит сообщения в кодировке cp1251, а консоль использует cp866.
Ключ -encoding utf8 указывает на кодировку исходного файла.
Можно сделать наоборот, и объяснить javac , что он должен выводить текст в нужной кодировке, использовав ключ -J-Dfile.encoding=cp866 :
Для вывода в utf-8 нужно включить кодовую страницу 65001 и задать кодировку utf8 компилятору.
Чтобы установить кодировку вывода для всех вызовов java, можно использовать переменную окружения JAVA_TOOL_OPTIONS .
Кодировки и корректный вывод (как вывести кириллицу в нужной кодировке) (Angie)
При создании строк конструктор String(byte[] byteArray, String encoding) создает Unicode-строку из массива байтовых ASCII-кодировок символов. В самом простом случае компилятор для получения двубайтовых символов Unicode добавит к каждому байту сташий нулевой бит. Получится диапазон ‘u0000’-‘u04ff’ кодировки Unicode, соответствующий кодам Latin1. Тексты на кириллице будут выведены неправильно. Если на компьютере установлена локаль, то компилятор создаст символы Unicode соответственно местной кодовой странице (в Windows обычно CP1251, в DOS — CP866, *nix — KOI8-R). Если локальная кодировка совпадает с кодировкой выводимых символов, то строка будет верна. Если исходный кириллический ASCII-текст был в одной кодировке, а местная — другая, то Unicode-строки Java не будут соответствовать кириллице. В этих случаях используется этот конструктор, с параметром нужной кодировки. Таким образом, если поток байт выводится и на консоль (CP866) и в файл (CP1251) Windows, то результат будет отличаться. Правильные символы Unicode-кириллицы получаются, если использовать ту же кодовую таблицу, в которой записан исходный массив байт. При выводе же строки на консоль, в окно, в файл или при передаче по сети лучше преобразовать строку Java с символами Unicode по правилам выхода в нужное место.
Пример преобразования 1: для вывода на консоль DOS (Cp866) строки в кодировке Windows (Сp1251)
Дан массив байт:
Создаем строку для вывода в другой кодировке:
Пример преобразования 2: из Unicode в Windows Cp1251
Источник: