Почему java не выводит русский текст
Перейти к содержимому

Почему java не выводит русский текст

Как вывести русский(кириллица) текст на экран?

Здравствуйте, я ввел данные у файл, и вот оно выводит такую. подскажите что нужно подключить или изменить?

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Xcode , С++ и русский язык: как вывести в файл русский текст без сбитой кодировки?
Как сделать так, чтобы после некоторых манипуляций в файл выводился русский текст без сбитой.

Как вывести русский текст из файла
Подскажите пожалуйста, как сделать, чтобы русский текст не вопросами появлялся. Английский текст и.

Как вывести русский текст в ассемблере?
org 100h begin: mov cl, Label1: mov ah,9 mov dx,offset String int 21h .

Как в файл вывести русский текст?
Когда русский текст вывожу в файл выводит какую то какафонию как это исправить

Am I evil? Yes, I am!

Эксперт PythonЭксперт Java

16162 / 9794 / 2734
Регистрация: 21.10.2017
Сообщений: 21,670

Ты уж определись.
)))
Am I evil? Yes, I am!

Эксперт PythonЭксперт Java

16162 / 9794 / 2734
Регистрация: 21.10.2017
Сообщений: 21,670

ЦитатаСообщение от Oleksandr1103 Посмотреть сообщение

ввел данные у файл
Файл-то в какой кодировке?
Регистрация: 05.03.2022
Сообщений: 131

ЦитатаСообщение от iSmokeJC Посмотреть сообщение

Ты уж определись.

я пробывал ставить windows-1251, но только хуже стало, оно и латинь перестало выводить. кодировка файла windows-1251

Am I evil? Yes, I am!

Эксперт PythonЭксперт Java

16162 / 9794 / 2734
Регистрация: 21.10.2017
Сообщений: 21,670
Oleksandr1103, ну так сконвертируй в utf-8
Регистрация: 05.03.2022
Сообщений: 131

ЦитатаСообщение от iSmokeJC Посмотреть сообщение

сделал, ничего не изменилось
Am I evil? Yes, I am!

Эксперт PythonЭксперт Java

16162 / 9794 / 2734
Регистрация: 21.10.2017
Сообщений: 21,670
Когда файл открываешь, указывай кодировку
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Как вывести русский текст в консоль?
Что-то я совсем запутался с кодировкой в python, версия стоит 2.7.4 пытаюсь выводить в консоль.

Русская кодировка в БД, как вывести на страницу русский текст?
Привет всем, у меня сложилась такая проблема, есть база данных, есть таблица с названиями городов.

В файле содержится текст. Вывести в отдельный текстовый файл первые буквы всех слов (русский текст)
Можно пожалуйста код с нуля

Как в массиве заменить определенный текст на другой и вывести новый полученный текст на экран?
Как в массиве заменить определенный текст на другой и вывести новый полученный текст на экран ? .

пдскажите функцию которая выводит русский текст на экран и его заголовочный файл с++ но не system ( » echo текст » );
пдскажите функцию которая выводит русский текст на экран и его заголовочный файл с++ но не system (.

Вывести русский текст
Помогите пожалуйста, как вывести в консоль не просто русский текст, а именно вывести текст из.

Или воспользуйтесь поиском по форуму:

В консоль не выводит русские буквы

Intelij IDE не выводит русские буквы
При запуске выводит какие то непонятные символы, кодировка стоит UTF — 8. Что не так? При чем в.

Русские символы при выводе из файла на консоль без использования BufferedReader
Неправильно отображаются русские символы при выводе их из файла на консоль, либо при копировании из.

Русские буквы в консоли
Всем привет! В Notepad был создан код в кодировке UTF-8 без BOM. Однако при запуске программы в cmd.

Русские буквы в консоли
Вчера основательно начал изучать этот замечательный язык. До этого уже было знакомство с.

Регистрация: 10.10.2010
Сообщений: 57

Попробуйте указать кодировку:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
public void depout(){ try { FileInputStream sink = new FileInputStream("department.txt"); DataInputStream in = new DataInputStream(sink); BufferedReader o = new BufferedReader(new InputStreamReader(in,"windows-1251")); String s; int c; s=""; while ((c = o.read()) != -1) { s=s+(char)c; } System.out.println(s); o.close(); } catch (Exception e) { e.printStackTrace();} } }

Откуда в Java всплывают проблемы с кодировками и возможная причина падения марсианского зонда

Планета Марс уже не первый год населена роботами. То тут, то там появляются беспилотные электрокары и летающие дроны, а в программах, написанных на Java, с завидной регулярностью всплывают проблемы с кодировками.

Хочу поделиться своими мыслями о том, почему это происходит.

Предположим, у нас есть файл, в котором хранится нужный нам текст. Чтобы поработать с этим текстом в Java нам нужно загнать данные в String. Как это сделать?

readFile

String readFile(String fileName, String encoding) < StringBuilder out = new StringBuilder(); char buf[] = new char[1024]; InputStream inputStream = null; Reader reader = null; try < inputStream = new FileInputStream(fileName); reader = new InputStreamReader(inputStream, encoding); for (int i = reader.read(buf); i >= 0; i = reader.read(buf)) < out.append(buf, 0, i); >> catch (FileNotFoundException e) < e.printStackTrace(); >catch (UnsupportedEncodingException e) < e.printStackTrace(); >catch (IOException e) < e.printStackTrace(); >finally < if (reader != null) < try < reader.close(); >catch (IOException e) < e.printStackTrace(); >> if (inputStream != null) < try < inputStream.close(); >catch (IOException e) < e.printStackTrace(); >> > String result = out.toString(); return result; > 

Обратите внимание, что для чтения файла недостаточно просто знать его имя. Нужно еще знать, в какой кодировке в нем находятся данные. Двоичное представление символов в памяти Java-машины и в файле на жестком диске практически никогда не совпадает, поэтому нельзя просто взять и скопировать данные из файла в строку. Сначала нужно получить последовательность байт, а уже потом произвести преобразование в последовательность символов. В приведенном примере это делает класс InputStreamReader.

Код получается достаточно громоздким при том, что необходимость в преобразовании из байтов в символы и обратно возникает очень часто. В связи с этим логичным было бы предоставить разработчику вспомомогательные функции и классы, облегчающие работу по перекодировке. Что для этого сделали разработчики Java? Они завели функции, которые не требуют указания кодировки. Например, класс InputStreamReader имеет конструктор с одним параметром типа InputStream.

readFile

String readFile(String fileName) < StringBuilder out = new StringBuilder(); char buf[] = new char[1024]; try ( InputStream inputStream = new FileInputStream(fileName); Reader reader = new InputStreamReader(inputStream); ) < for (int i = reader.read(buf); i >= 0; i = reader.read(buf)) < out.append(buf, 0, i); >> catch (FileNotFoundException e) < e.printStackTrace(); >catch (IOException e) < e.printStackTrace(); >String result = out.toString(); return result; > 

Стало чуть попроще. Но здесь разработчики Java закопали серьезные грабли. В качестве кодировки для преобразования данных они использовали так называемый «default character encoding».

Default charset устанавливается Java-машиной один раз при старте на основании данных взятых из операционной системы и сохраняется для информационных целей в системном свойстве file.encoding. В связи с этим возникают следующие проблемы.

  1. Кодировка по умолчанию — это глобальный параметр. Нельзя установить для одних классов или функций одну кодировку, а для других — другую.
  2. Кодировку по умолчанию нельзя изменить во время выполнения программы.
  3. Кодировка по умолчанию зависит от окружения, поэтому нельзя заранее знать, какая она будет.
  4. Поведение методов, зависящих от кодировки по умолчанию, нельзя надежно покрыть тестами, потому что кодировок достаточно много, и множество их значений может расширяться. Может выйти какая-нибудь новая ОС с кодировкой типа UTF-48, и все тесты на ней окажутся бесполезными.
  5. При возникновении ошибок приходится анализировать больше кода, чтобы узнать, какую именно кодировку использовала та или иная функция.
  6. Поведение JVM в случае изменения окружения после старта становится непредсказуемо.

Из-за этого происходят удивительные вещи. Например, программа может неправильно открыть файл, который ранее сама же создала.

Или, скажем, есть у нас XML-файл, у которого в заголовке написано encoding=«UTF-8», но в Java-программе этот файл открывается при помощи класса FileReader, и привет. Где-то откроется нормально, а где-то нет.

Особенно ярко проблема file.encoding проявляется в Windows. В ней Java в качестве кодировки по умолчанию использует ANSI-кодировку, которая для России равна Cp1251. В самой Windows говорится, что «этот параметр задает язык для отображения текста в программах, не поддерживающих Юникод». При чем здесь Java, которая изначально задумывалась для полной поддержки Юникода, непонятно, ведь для Windows родная кодировка — UTF-16LE, начиная где-то с Windows 95, за 3 года до выхода 1-й Java.

Так что если вы сохранили при помощи Java-программы файл у себя на компьютере и отправили его вашему коллеге в Европу, то получатель при помощи той же программы может и не суметь открыть его, даже если версия операционной системы у него такая же как и у вас. А когда вы переедете с Windows на Mac или Linux, то вы уже и сами свои файлы можете не прочитать.

А ведь еще есть Windows консоль, которая работает в OEM-кодировке. Все мы наблюдали, как вплоть до Java 1.7 любой вывод русского текста в черном окне при помощи System.out выдавал крокозябры. Это тоже результат использования функций, основанных на default character encoding.

Я у себя проблему кодировок в Java решаю следующим образом:

  1. Всегда запускаю Java с параметром -Dfile.encoding=UTF-8. Это позволяет убрать зависимость от окружения, делает поведение программ детерминированным и совместимым с большинством операционных систем.
  2. При тестировании своих программ обязательно делаю тесты с нестандартной (несовместимой с ASCII) кодировкой по умолчанию. Это позволяет отловить библиотеки, которые пользуются классами типа FileReader. При обнаружении таких библиотек стараюсь их не использовать, потому что, во-первых, с кодировками обязательно будут проблемы, а во-вторых, качество кода в таких библиотеках вызывает серьезные сомнения. Обычно я запускаю java с параметром -Dfile.encoding=UTF-32BE, чтобы уж наверняка.

По идее, со временем код должен становиться более качественным, программы более надежными, форматы более стандартизованными. Однако этого не происходит. Вместо этого наблюдается всплеск ошибок с кодировками в Java-программах. Видимо, это связано с тем, что в мир Java иммигрировали люди, не привыкшие решать проблему кодировок. Скажем, в C# по умолчанию применяется кодировка UTF-8, поэтому разработчик, переехавший с C#, вполне разумно считает, что InputStreamReader по умолчанию использует эту же кодировку, и не вдается в детали его реализации.

Недавно наткнулся на подобную ошибку в maven-scr-plugin.

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

Баг в JDK 8

import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.Arrays; import javax.crypto.Cipher; public class PemEncodingBugDemo < public static void main(String[] args) < try < String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ012345467890\r\n /=+-"; byte ascii[] = str.getBytes(StandardCharsets.US_ASCII); byte current[] = str.getBytes(Charset.defaultCharset()); if (Arrays.equals(ascii, current)) < System.err.printf("Run this test with non-ascii native encoding,%n"); System.err.printf("for example java -Dfile.encoding=UTF-16%n"); >Cipher.getInstance("RC4"); > catch (Throwable e) < e.printStackTrace(); >> > 

На девятке не воспроизводится, видимо, там уже починили.

Поискав по базе ошибок, я нашел еще одну недавно закрытую ошибку, связанную с теми же самыми функциями. И что характерно, их даже исправляют не совсем правильно. Коллеги забывают, что для стандартных кодировок, начиная с Java 7, следует использовать константы из класса StandardCharsets. Так что впереди, к сожалению, нас ждет еще масса сюрпризов.

Запустив grep по исходникам JDK, я нашел десятки мест, где используются платформозависимые функции. Все они будут работать некорректно в окружении, где родная кодировка, несовместима с ASCII. Например, класс Currency, хотя казалось бы, уж этот-то класс должен учитывать все аспекты локализации.

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

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

Функция На что заменить
Charset.defaultCharset() удалить
FileReader.FileReader(String) FileReader.FileReader(String, Charset)
FileReader.FileReader(File) FileReader.FileReader(File, Charset)
FileReader.FileReader(FileDescriptor) FileReader.FileReader(FileDescriptor, Charset)
InputStreamReader.InputStreamReader (InputStream) InputStreamReader.InputStreamReader (InputStream, Charset)
FileWriter.FileWriter(String) FileWriter.FileWriter(String, Charset)
FileWriter.FileWriter(String, boolean) FileWriter.FileWriter(String, boolean, Charset)
FileWriter.FileWriter(File) FileWriter.FileWriter(File, Charset)
FileWriter.FileWriter(File, boolean) FileWriter.FileWriter(File, boolean, Charset)
FileWriter.FileWriter(FileDescriptor) FileWriter.FileWriter(FileDescriptor, Charset)
OutputStreamWriter.OutputStreamWriter (OutputStream) OutputStreamWriter.OutputStreamWriter (OutputStream, Charset)
String.String(byte[]) String.String(byte[], Charset)
String.String(byte[], int, int) String.String(byte[], int, int, Charset)
String.getBytes() String.getBytes(Charset)

Чуть не забыл

Да, а что там с космическим аппаратом на Марсе?

Часть программного обеспечения для марсианского зонда Скиапарелли написали на Java, на актуальной в то время версии 1.7. Запустили изделие весной, и путь к месту назначения составил полгода. Пока он летел, в Европейском космическом агентстве обновили JDK.

Ну а что? Разработка софта для нынешней миссии завершена, надо делать ПО уже для следующей, а мы все еще на семерке сидим. НАСА и Роскосмос уже давно на восьмерку перешли, а там лямбды, стримы, интерфейсные методы по умолчанию, новый сборщик мусора, и вообще.

Обновились и перед посадкой отправили на космический аппарат управляющую команду не в той кодировке, в которой он ожидал.

  • encoding
  • file.encoding

unixforum.org

Всем привет.
Ситуация следующая, поставил я Cygwin, чтобы пока изучаю Java заодно попрактиковаться с Vim. (пока софт простой)
Подключил java sdk,всё компилируется — запускается, но никак я не могу кодировку в чате победить русскую.
Cygwin используется через minty,в переменные среды Windows я её добавлять не хочу. В настройках терминала выставлено UTF-8, файл .java тоже в UTF-8.
Программа простенькая совсем:

public class MyFirstApp < public static void main (String[] args) < System.out.println("Текст на русском") System.out.println("Еще текст") >> 

Я конечно костыль нашел, менять кодировку на cp-1251 и запускать через консоль Windows,но хотелось бы все-таки с Cygwin разобраться.
В настройки bash’a Cygwin я не лазил,там не выставлял ничего, только в настройках minty. При этом обычный печатный русский текст отображается нормально.

«Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные»

Спасибо сказали:

Hephaestus Сообщения: 3729 Статус: Многоуважаемый джинн. ОС: Slackware64-14.1/14.2 Контактная информация:

Re: Cygwin, Java и русская кодировка в консоли

Сообщение Hephaestus » 11.10.2020 08:41

Во-первых, что говорит locale в cygwin?
Во-вторых, как выглядит то, что получается вместо нужной кодировки?
В-третьих, просто исходника в UTF-8 может быть недостаточно для получения результата.
Например, кодировка содержит два байта на символ, а программа работает так, как будто там один байт на символ. Понятно, что в этом случае ничего хорошего не выйдет.

Конкретно по java не подскажу — не занимаюсь. А вообще бывает так, что нужно явно указывать дефолтную кодировку, иначе она определяется неверно. Это, кстати, бывает в самых разных ситуациях. В языке Pascal, например, работа с unicode — это целая история. Кроме того, я с этим сталкивался, например, в scm-файлах, а в xml-файлах указание кодировки — это вообще норма. Так что ничего удивительного в этом нет.

А в Вашем случае получилась этакая «гетерогенная среда»: в системе кодировка одна, а в терминале другая, поэтому, я полагаю, явное указание кодировки в программе — это необходимость.

Пускай скрипят мои конечности.
Я — повелитель бесконечности.
Мой блог
Спасибо сказали:
UnixNoob Сообщения: 1313 ОС: Slackware

Re: Cygwin, Java и русская кодировка в консоли

Сообщение UnixNoob » 11.10.2020 13:10

11.10.2020 08:41
Во-первых, что говорит locale в cygwin?
Вывод locale

LANG=C.UTF-8 LC_CTYPE="C.UTF-8" LC_NUMERIC="C.UTF-8" LC_TIME="C.UTF-8" LC_COLLATE="C.UTF-8" LC_MONETARY="C.UTF-8" LC_MESSAGES="C.UTF-8" LC_ALL= 

При добавлении в .bashrc

export LANG=ru_RU.UTF-8 export LC_ALL=ru_RU.UTF-8 

вывод locale меняется, но выводу в консоль это не помогает и картина остается той же. ru_RU

LANG=ru_RU.UTF-8 LC_CTYPE="ru_RU.UTF-8" LC_NUMERIC="ru_RU.UTF-8" LC_TIME="ru_RU.UTF-8" LC_COLLATE="ru_RU.UTF-8" LC_MONETARY="ru_RU.UTF-8" LC_MESSAGES="ru_RU.UTF-8" LC_ALL=ru_RU.UTF-8 

11.10.2020 08:41
Во-вторых, как выглядит то, что получается вместо нужной кодировки?
CygJav.jpg (7.22 КБ) 5769 просмотров
11.10.2020 08:41

А в Вашем случае получилась этакая «гетерогенная среда»: в системе кодировка одна, а в терминале другая, поэтому, я полагаю, явное указание кодировки в программе — это необходимость.

Я понимаю что это знатный велосипед получается, единственное в одном из ответов в интернете, относительно проблем с кодировкой, но без разъяснения почему, был совет использовать cygwin. А касательно Java бывают варианты с указанием кодировки именно кодом, а бывает еще указание кодировки или для компилятора или при запуске, вида примерно такого:

java -Dconsole.encoding=windows-1251 

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

 String encoding = System.getProperty("console.encoding","utf=8"); PrintStream ps = new PrintStream(System.out, encoding); ps.println("Текст"); 

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

«Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные»

Спасибо сказали:
Bizdelnick Модератор Сообщения: 20567 Статус: nulla salus bello ОС: Debian GNU/Linux

Re: Cygwin, Java и русская кодировка в консоли

Сообщение Bizdelnick » 11.10.2020 13:22

11.10.2020 13:10
Здесь явно ошибка. Должен быть дефис.
Пишите правильно:

в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик

Спасибо сказали:

Hephaestus Сообщения: 3729 Статус: Многоуважаемый джинн. ОС: Slackware64-14.1/14.2 Контактная информация:

Re: Cygwin, Java и русская кодировка в консоли

Сообщение Hephaestus » 11.10.2020 14:59

11.10.2020 13:10
выводу в консоль это не помогает и картина остается той же

На самом деле это может быть важно.
Обеспечив в программе использование нужной кодировки, но оставив при этом настройки локали в другой кодировке, Вы вполне можете также получить иероглифы, только другого вида. Поэтому нужно учитывать всё: и настройки терминала, и указание кодировки в коде программы.

11.10.2020 13:10

в одном из ответов в интернете, относительно проблем с кодировкой, но без разъяснения почему, был совет использовать cygwin

Объясняю. Windows в общем случае может не уметь в utf-8.
В Win7 появилась возможность, сохранять текст в utf-8, скажем, в блокноте.
Но вообще-то unicode в Windows — это UTF-16.
В виндовом терминале тоже можно худо-бедно выводить utf-8, выполнив предварительно команду chcp 65001 . Как эту настройку сделать постоянной, я не интересовался.

11.10.2020 13:10

Я уверен что это решаемо, видимо просто при переводе книг на русский, никто не задумывался над русской кодировкой в выводе.

Здесь вопрос не столько о переводе на русский, сколько о работе с латинницей и «не латинницей».
Вопросы «не латинницы» в оригинальной (англоязычной) литературе могут и не затрагиваться.

11.10.2020 13:10
чтобы понять о чем читать

Читать нужно о том, как в языке программирования (в Вашем случае java) работать с разными кодировками вообще, мультибайтовыми в частности, и utf-8 в конкретно Вашем случае.
И всё это ещё нужно рассматривать через призму кросс-платформенности (насколько в нужной ОС налажена работа с нужной кодировкой).
Это на самом деле довольно большая тема, и в разных ЯП это всё очень по-разному. Обычно в литературе/документации этому вопросу отводится отдельный раздел/глава.

Пускай скрипят мои конечности.
Я — повелитель бесконечности.
Мой блог
Спасибо сказали:
UnixNoob Сообщения: 1313 ОС: Slackware

Re: Cygwin, Java и русская кодировка в консоли

Сообщение UnixNoob » 11.10.2020 15:43

11.10.2020 14:59

В виндовом терминале тоже можно худо-бедно выводить utf-8, выполнив предварительно команду chcp 65001. Как эту настройку сделать постоянной, я не интересовался.

В Windows у меня получалось только при смене кодировки файла .java на Windows-1251 и затем какой-то из варивантов с chcp, но это не удобно.

11.10.2020 14:59

Читать нужно о том, как в языке программирования (в Вашем случае java) работать с разными кодировками вообще, мультибайтовыми в частности, и utf-8 в конкретно Вашем случае.
И всё это ещё нужно рассматривать через призму кросс-платформенности (насколько в нужной ОС налажена работа с нужной кодировкой).
Это на самом деле довольно большая тема, и в разных ЯП это всё очень по-разному. Обычно в литературе/документации этому вопросу отводится отдельный раздел/глава.

Если никто не подскажет более конкретно, видимо придется начать изучение с этого. Просто я думал вопрос касается больше настройки Cygwin, чем кодировок Java в целом. Или указания кодировки компилятору, а тут всё так оказалось не просто (для новичка в программировании)

«Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные»

Спасибо сказали:

Hephaestus Сообщения: 3729 Статус: Многоуважаемый джинн. ОС: Slackware64-14.1/14.2 Контактная информация:

Re: Cygwin, Java и русская кодировка в консоли

Сообщение Hephaestus » 11.10.2020 18:20

11.10.2020 15:43
Просто я думал вопрос касается больше настройки Cygwin, чем кодировок Java в целом.

Ну, уметь работать с кодировками при написании кода — это в любом случае не вредно.
Безотносительно Cygwin или Java.

11.10.2020 15:43
а тут всё так оказалось не просто (для новичка в программировании)

Новичку, пожалуй, даже проще. Он просто изучает соответствующие разделы литературы/документации
и пишет код с учетом этих знаний.
Сложнее, когда уже есть приложение (под Win, например), а его, начиная там с какой-то версии, решают «перетащить на юникод». Вот тут может оказаться непросто, да. Кучу кода придется перелопатить.

Пускай скрипят мои конечности.
Я — повелитель бесконечности.
Мой блог
Спасибо сказали:
UnixNoob Сообщения: 1313 ОС: Slackware

Re: Cygwin, Java и русская кодировка в консоли

Сообщение UnixNoob » 11.10.2020 19:34

Hephaestus
Ну тут согласен. Для Windows консоли помогает это в итоге, подсказали:

javac MyFirstApp.java -encoding UTF-8

Т.е компиляция с указанием кодировки.
В Cygwin с таким методом это:

▀ яютхышЄхы№ ьшЁр 

может ему надо другую указать,но как понять какую, когда должно и UTF-8 отображаться,если судить по настройкам.

Попробовал другие — не помогает.

«Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные»

Спасибо сказали:

Hephaestus Сообщения: 3729 Статус: Многоуважаемый джинн. ОС: Slackware64-14.1/14.2 Контактная информация:

Re: Cygwin, Java и русская кодировка в консоли

Сообщение Hephaestus » 11.10.2020 21:49

UnixNoob
Я собрал элементарный helloworld с сообщением на русском языке в utf-8 и попробовал разные варианты.
Сначала в Linux, кодировка utf-8. Сообщение выводится нормально.
Перетащил эти файлы в Windows, запустил в cygwin (локаль utf8) — получил мусор. Пересобрал исходник — сообщение вывелось нормально.
Попробовал родную виндовую консоль (не cygwin).
Здесь вообще всё интересно: сообщение выводится нормально, если исходник в 1251, хотя кодовая страница самой консоли — 866. Указание кодовой страницы 65001 результата не дает, хотя по идее должно.
Ваш вариант с указанием кодировки при сборке сработал, но опять-таки, если сама консоль настроена на родную ей кодовую страницу (866).

Вывод: Если Вам нужно непременно в cygwin, настраивайте там локаль в utf-8 и всё должно работать. Без указания кодировки компилятору.
Я использую в cygwin разные кодировки (utf8, cp1215, cp866), для каждой кодировки у меня свой ярлык с указанными параметрами запуска и свой rc-файл в домашнем каталоге.
Кстати, utf-8 — это, вроде бы, вообще дефолтный вариант, странно, что у Вас локаль по умолчанию — C. Хотя я это всё настраивал давно, уже не помню.
Так или иначе, у меня для utf-8 в .minttyrc, кроме всего прочего, написано следующее:

Locale=ru_RU Charset=UTF-8 Language=ru 

При таком раскладе locale выводит «ru_RU.UTF-8»
и программа на java с исходником в utf-8 нормально выводит сообщение на русском языке.

А теперь вопрос к Вам:
Зачем нужно в Windows делать linux-прослойку вместо того, чтобы просто использовать Linux?
Я-то это использую на рабочей виндовой машине, потому что мне сложно обходиться без нормального терминала и всяких unix-утилит.
А Вам-то это зачем? Почему Вы просто не используете Linux с родной нормальной консолью и кодировкой utf-8?
Чтобы изучать java, Windows не требуется. Не говоря уже о том, что с родной виндовой командной строкой Вы проклянете всё на свете. Вы хоть Conemu возьмите что ли в качестве обертки.
Вам нужен кросс-платформ? А какой кросс-платформ? Просто кросс-платформ или «ваще-ваще кросс-платформ»?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *