Баг или фича в Java: Вывод кириллических символов в консоль
Есть много особенностей, про которые желательно знать, программируя на Java, даже если Вы начинающий программист. Под катом я расскажу как вывести кириллические символы в консоль Windows и наглядно это продемонстрирую.
Начнем с простого.
Их в Java 8:
- boolean;
- byte, char, short, int, long;
- float, double.
Char — это символьный тип данных. Переменная такого типа занимает 2 байта памяти, так как хранится в кодировке unicode.
С переменными этого типа можно производить только операции присваивания, но зато различными способами. Самый простой из них выглядит так:
c = ‘b’;
Символ можно представить также в виде его кода, записанного в восьмеричной системе счисления:
c = ‘\077’;
Где 077 – это обязательно трехзначное число, не большее чем 377 (=255 в десятичной системе счисления).
Или же в шестнадцатеричной системе счисления следующим образом:
c = ‘\u12a4’;
Кроме того, существуют специальные символы, такие как знак абзаца, разрыв страницы и др. Знак абзаца запишется, например, так:
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» — по умолчанию.
Источник
Кодировка и вывод русских букв
Всем привет. Подскажите, пожалуйста, почему так работает код:
. .
hello
. hello
привет
. привет
Почему в первой строке PrintWriter не отображает русские буквы, а в последней частично отображает?
При этом символы считываются корректно?
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Вывод русских букв
Как подключить нужную кодировку для вывода русского текста, что написать необходимо,? Подскажите .
Вывод русских букв — Java SE
Здравствуйте! Подскажите, не могу разобраться в intellij idea 14, при компиляции файла и выводе.
Вывод в консоль кодов русских букв в UTF-8
Написать программу, чтобы на консоль выводила коды русских букв в UTF-8. Есть шаблон: char ch1.
Кодировка, — к вопросу о русских буквах в java
Всем дорый день. Вопрос связан с русскими буквами. Значит ситуация следующая: Есть веб.
Спасибо, но
все равно не понял.
Можно пояснить, что значит строка:
PrintWriter — крутая штука, которая пошла от Writer и умеет работать с форматом UTF-8, который работает со всеми алфавитами мира (во всяком случае со всем основным), данная фича занимает 2 байта, в то время как в конструктор мы передаем OutputStreamWriter, который работает с байтами (по 1 байту), что не совсем удобно, подключаем вывод System.out, указываем кодировку (которая вообщем-то предназначена для cmd в windows по умолчанию) и ставим true для auto-flush, это для того, чтобы данные, которые попадают в «поток» сразу выталкивались в System.out без ручного вызова pw.flush() в данном случае.
те «ромбики», «кубики» и прочие знаки вопроса связаны с тем, что IDEA ждет выходные данные по два байта и по ним их и группирует, а вы передаете по одному байту, примерно можно сравнить со следующим:
вы передаете поток байтов(б):
б1 б2 б3 б4 б5 б6 . где «б№» байт по порядковому номеру
а IDEA думает (по умолчанию же так), что следует юзать UTF-8, она то не знает что мы пошли хитрым путем cp866, и принимает байты вот так, группируя по 2
б1б2 б3б4 б5б6.
из-за этого и визуальный косяк, выхода два:
1) хороший — всегда юзать UTF-8 общепризнанный миром
2) плохой, даже про него писать не буду
Источник
Не отображается кирилица в консоли
У меня не читабельный вывод русских символов в консоли после запуска тестов
Что было попробовано:
№1 Изменить кодировку в File->Settings>Editor->File Encodings Global Encoding и Project Encoding выбрал (перед этим проверил что везде в системе по умолчанию русский язык, то есть в Региональных настройках) и Default Encoding for properties files поставил UTF-8
№2 Внизу проекта в нижнем правом углу проверил UTF-8
№3 Проверил в chcp было 866 в cmd
№4 В файлах Idea IntelliJ IDEA Community Edition 2018.2.8\bin\idea.exe.vmoptions и idea64.exe.vmoptions, также доступные через Help->Edit Custom VM Options. я добавил строку -Dfile.encoding=UTF-8.
№5 Во всех pom.xml прописал кодировку
№6 А так же добавлял параметр -Dfile.encoding=UTF-8 в строке запуска конфигурации (Edit configurations) clean test -pl tr2mongaranty-component-test-bdd -fae -P bdd-tests,sbpegas-mon-qa -DfailIfNoTests=false -Dfile.encoding=UTF-8 -Dcucumber.options.tags=@algIvan
При том если я просто создаю класс и печатаю русские символы всё ок.
И дальше стартует веб драйвер и идёт процесс прогона теста
2 ответа 2
- Закрыть Intellij IDEA
- Добавить в файлы idea.exe.vmoptions и idea64.exe.vmoptions строку -Dconsole.encoding=UTF-8
- Запустить Intellij IDEA
При решение этого вопроса пришлось испробовать много разных методов найденных на различных ресурсах решил их объединить вместе здесь.
№1 Изменить кодировку в File->Settings>Editor->File Encodings Global Encoding и Project Encoding выбрал (перед этим проверил что везде в системе по умолчанию русский язык, то есть в Региональных настройках) и Default Encoding for properties files поставил UTF-8
Примечание: Касательно галочки в поле Default Encoding for properties files UTF-8 на многих ресурсах пишут, что эту галочку нужно убрать, но мне помогло именно поставить её.
№2 Внизу проекта в нижнем правом углу проверить UTF-8
№3 Проверить в cmd командой chcp должно быть 866
Примечание: Если это не так Установить значение 866 для параметра OEMCP по пути \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage
Источник
Вывод кириллицы в Java
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Вывод кириллицы в консоль
Есть программка, считывающая текстовую информацию из текстового файла на экран. Английские буквы.
Ошибочный вывод кодировки кириллицы
Нужно ввести русский текст и под каждой буквой вывести порядковый номер этой буквы в соответствии с.
Как включить отображение кириллицы в консоли Java?
Среда разработки Intellij IDEA. Может есть какие-то команды вроде setlocale, как в C++?
Читаются не все символы кириллицы в консоли (java, NetBeans)
Программа не читает символы казахского языка (вместо них идут знаки вопроса), например «ғ».
Lizavetka, а как вы запускаете программу? через IDE или через командную строку?
Добавлено через 13 минут
Lizavetka, если вы запускаете в eclipse, то да, получите тот результат, который вы описываете, если же создать файл PrWr.java и скомпилировать его через командную строку
в итоге Вы получите файл PrWr.class и запустите его через виртуальную машину
Вот такая ошибка выходит когда пытаюсь сделать вывод на кириллице
Теперь вот такая ошибка:
run:
Введите Ф.И.О:
Exception in thread «main» java.lang.NullPointerException
at javaapplication2.JavaApplication2.create_new_sotrudnik(JavaA pplication2.java:51)
at javaapplication2.JavaApplication2.main(JavaApplication2.java :40)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)
Вывод кириллицы
каким компилятором лучше пользоваться.я пользуюсь dev c++, но он в консоле не отображает все что.
Вывод кириллицы в консоль
Начинаю свое обучение и столкнулся с такой бедой. Из-за строки printf(«C Новым годом!\n»);.
Вывод кириллицы в консоль
Привет, как изменить код что-бы выводилась русская «б» вместо иероглифов? SetConsoleCP(1251);.
Вывод кириллицы в консоль
Здравствуйте. Вообще-то я занимаюсь явой, но, для общего развития решил освоить кресты.
Ввод/вывод кириллицы
Здравствуйте. Ситуация такая. Я ввожу/вывожу символьный массив подобным образом: char a; cin >>.
Вывод кириллицы в FLTK
Скачал библиотеку fltk версии 1.3.4, попробовал скомпилировать первый пример из документации.
Источник
Неверное отображение русских символов
Возникла необходимость работы через консоль с русским буквами. Код такой:
В результате у меня получается примерно следующее:
С кодировками экспериментировал, не помогло.
2 ответа 2
Раз вопрос всплыл, отвечу на него.
Ваша проблема в том, что «консоль» Netbeans — и консоль ОС — это немного разные вещи. В частности, у них отличаются используемые кодировки. Оптимальным было бы получение текущей кодировки консоли через Console API — но Java такого не предоставляет. Поэтому надо получить информацию о консольной кодировке другим способом. К примеру, через свойство console.encoding .
Способ 1
Для начала, установка свойства console.encoding в предопределенное значение ничего не дает. Это свойство попросту никем не читается. Вместо того, чтобы ставить его в cp866 , следовало бы, напротив, прочитать из него значение.
Таким образом, вместо того, чтобы ожидать ввода в cp866 , программа позволяет запустившему ее указать любую кодировку ( utf-8 — это кодировка по умолчанию. Замените ее на ту, которую использует консоль NetBeans). Запускать программу надо будет как-то так:
На первый взгляд, такой способ запуска кажется сложным. Но обычно для запуска «серьезных» программ на Java всегда используется некоторый пакетный файл. Что мешает дописать этот ключ в него?
И не забывайте, консоль в Windows может оказаться в любой кодировке! К примеру, некоторые программы, такие как reg.exe , умеют работать с консолью только в windows-1251 . Умение выводить в любой кодировке может пригодиться.
Способ 2
Если уже заговорили про пакетные файлы, то есть более простой способ, хотя и не такой мощный. Можно просто сменить кодировку консоли на нужную перед запуском программы:
Вот номера кодовых страниц Windows, которые могут пригодиться:
- 866 — cp866
- 1251 — windows-1251
- 65001 — кодировка utf-8
- 1200 — двухбайтовая кодировка utf-16
Источник