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

Модератор: Модераторы разделов

Аватара пользователя
UnixNoob
Сообщения: 167
ОС: Slackware

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

Сообщение UnixNoob »

Всем привет.
Ситуация следующая, поставил я 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
Сообщения: 3374
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

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

Сообщение Hephaestus »

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

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

А в Вашем случае получилась этакая "гетерогенная среда": в системе кодировка одна, а в терминале другая, поэтому, я полагаю, явное указание кодировки в программе - это необходимость.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
UnixNoob
Сообщения: 167
ОС: Slackware

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

Сообщение UnixNoob »

Hephaestus писал:
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

Hephaestus писал:
11.10.2020 08:41
Во-вторых, как выглядит то, что получается вместо нужной кодировки?
CygJav.jpg
Hephaestus писал:
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
Модератор
Сообщения: 17454
Статус: grammatikführer
ОС: Debian GNU/Linux

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

Сообщение Bizdelnick »

UnixNoob писал:
11.10.2020 13:10
"utf=8"
Здесь явно ошибка. Должен быть дефис.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3374
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

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

Сообщение Hephaestus »

UnixNoob писал:
11.10.2020 13:10
выводу в консоль это не помогает и картина остается той же
На самом деле это может быть важно.
Обеспечив в программе использование нужной кодировки, но оставив при этом настройки локали в другой кодировке, Вы вполне можете также получить иероглифы, только другого вида. Поэтому нужно учитывать всё: и настройки терминала, и указание кодировки в коде программы.
UnixNoob писал:
11.10.2020 13:10
в одном из ответов в интернете, относительно проблем с кодировкой, но без разъяснения почему, был совет использовать cygwin
Объясняю. Windows в общем случае может не уметь в utf-8.
В Win7 появилась возможность, сохранять текст в utf-8, скажем, в блокноте.
Но вообще-то unicode в Windows - это UTF-16.
В виндовом терминале тоже можно худо-бедно выводить utf-8, выполнив предварительно команду chcp 65001. Как эту настройку сделать постоянной, я не интересовался.
UnixNoob писал:
11.10.2020 13:10
Я уверен что это решаемо, видимо просто при переводе книг на русский, никто не задумывался над русской кодировкой в выводе.
Здесь вопрос не столько о переводе на русский, сколько о работе с латинницей и "не латинницей".
Вопросы "не латинницы" в оригинальной (англоязычной) литературе могут и не затрагиваться.
UnixNoob писал:
11.10.2020 13:10
чтобы понять о чем читать
Читать нужно о том, как в языке программирования (в Вашем случае java) работать с разными кодировками вообще, мультибайтовыми в частности, и utf-8 в конкретно Вашем случае.
И всё это ещё нужно рассматривать через призму кросс-платформенности (насколько в нужной ОС налажена работа с нужной кодировкой).
Это на самом деле довольно большая тема, и в разных ЯП это всё очень по-разному. Обычно в литературе/документации этому вопросу отводится отдельный раздел/глава.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
UnixNoob
Сообщения: 167
ОС: Slackware

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

Сообщение UnixNoob »

Hephaestus писал:
11.10.2020 14:59
В виндовом терминале тоже можно худо-бедно выводить utf-8, выполнив предварительно команду chcp 65001. Как эту настройку сделать постоянной, я не интересовался.
В Windows у меня получалось только при смене кодировки файла .java на Windows-1251 и затем какой-то из варивантов с chcp, но это не удобно.
Hephaestus писал:
11.10.2020 14:59
Читать нужно о том, как в языке программирования (в Вашем случае java) работать с разными кодировками вообще, мультибайтовыми в частности, и utf-8 в конкретно Вашем случае.
И всё это ещё нужно рассматривать через призму кросс-платформенности (насколько в нужной ОС налажена работа с нужной кодировкой).
Это на самом деле довольно большая тема, и в разных ЯП это всё очень по-разному. Обычно в литературе/документации этому вопросу отводится отдельный раздел/глава.
Если никто не подскажет более конкретно, видимо придется начать изучение с этого. Просто я думал вопрос касается больше настройки Cygwin, чем кодировок Java в целом. Или указания кодировки компилятору, а тут всё так оказалось не просто (для новичка в программировании)
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3374
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

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

Сообщение Hephaestus »

UnixNoob писал:
11.10.2020 15:43
Просто я думал вопрос касается больше настройки Cygwin, чем кодировок Java в целом.
Ну, уметь работать с кодировками при написании кода - это в любом случае не вредно.
Безотносительно Cygwin или Java.
UnixNoob писал:
11.10.2020 15:43
а тут всё так оказалось не просто (для новичка в программировании)
Новичку, пожалуй, даже проще. Он просто изучает соответствующие разделы литературы/документации
и пишет код с учетом этих знаний.
Сложнее, когда уже есть приложение (под Win, например), а его, начиная там с какой-то версии, решают "перетащить на юникод". Вот тут может оказаться непросто, да. Кучу кода придется перелопатить.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
UnixNoob
Сообщения: 167
ОС: Slackware

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

Сообщение UnixNoob »

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

Код: Выделить всё

javac MyFirstApp.java -encoding UTF-8
Т.е компиляция с указанием кодировки.
В Cygwin с таким методом это:

Код: Выделить всё

▀ яютхышЄхы№
ьшЁр
может ему надо другую указать,но как понять какую, когда должно и UTF-8 отображаться,если судить по настройкам.

Попробовал другие - не помогает.
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3374
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

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

Сообщение Hephaestus »

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 возьмите что ли в качестве обертки...
Вам нужен кросс-платформ? А какой кросс-платформ? Просто кросс-платформ или "ваще-ваще кросс-платформ"?
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
UnixNoob
Сообщения: 167
ОС: Slackware

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

Сообщение UnixNoob »

Hephaestus писал:
11.10.2020 21:49
Зачем нужно в Windows делать linux-прослойку вместо того, чтобы просто использовать Linux?
Я-то это использую на рабочей виндовой машине, потому что мне сложно обходиться без нормального терминала и всяких unix-утилит.
А Вам-то это зачем? Почему Вы просто не используете Linux с родной нормальной консолью и кодировкой utf-8?
Чтобы изучать java, Windows не требуется. Не говоря уже о том, что с родной виндовой командной строкой Вы проклянете всё на свете. Вы хоть Conemu возьмите что ли в качестве обертки...
Вам нужен кросс-платформ? А какой кросс-платформ? Просто кросс-платформ или "ваще-ваще кросс-платформ"?
Это некий компромисс, мне нравится vim, его переключение режимов, и в целом мне нравится консоль Linux(смешной наверно аргумент, учитывая что знаком я с ней слабо). Не могу определиться какой дистрибутив использовать. Сам себе приключения нахожу в целом. В Slackware меня немного смущает что она замкнута на одном человеке. Хоть с Cygwin я ничего не делал, по моим представлениям, что он не хочет со мной дружить.
Hephaestus писал:
11.10.2020 21:49
программа на java с исходником в utf-8 нормально выводит сообщение на русском языке.
Удивительно, почему же у меня не хочет выводить. Когда я ничего не трогал и настройки использовал в том числе такие,как вы указали. Но если у вас всё работает, думаю ответ будет сложно найти,возможно где-то хвост мешает в настройках самой Windows или что-то подобное.
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3374
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

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

Сообщение Hephaestus »

UnixNoob писал:
11.10.2020 22:45
Это некий компромисс, мне нравится vim, его переключение режимов, и в целом мне нравится консоль Linux(смешной наверно аргумент, учитывая что знаком я с ней слабо).
Ну и прекрасно. Это как раз должно бы Вас склонить к использованию Linux, а не оттолкнуть.
UnixNoob писал:
11.10.2020 22:45
Не могу определиться какой дистрибутив использовать.
Делайте выбор, исходя из Ваших задач и уровня знаний.
Я выбрал Slackware, потому что там разумное, на мой взгляд, сочетание пакетного дистра и сборки из исходников.
Но пришел я к этому далеко не сразу.
UnixNoob писал:
11.10.2020 22:45
В Slackware меня немного смущает что она замкнута на одном человеке.
Если Вы имеете в виду Патрика, то он давно уже не один.
Он, конечно, лидер и решающее слово за ним, но там всё-таки работает команда.
Если же Вас смущает, что вот случись чего - и Slackware загнется, так это могут пройти годы.
Пользуйтесь пока, а там видно будет.
В любом случае, не стоит "намертво привязываться" к одному дистру.
Изучайте систему и тогда переход между дистрами не будет проблемой.
UnixNoob писал:
11.10.2020 22:45
Хоть с Cygwin я ничего не делал, по моим представлениям, что он не хочет со мной дружить.
UnixNoob писал:
11.10.2020 22:45
Удивительно, почему же у меня не хочет выводить. Когда я ничего не трогал и настройки использовал в том числе такие,как вы указали.
Так. Попробуйте начать сначала.
Вы ставите cygwin, открываете терминал и выполняете команду locale.
По идее должно быть ru_RU.
В левом верхнем углу окна терминала щелчок по значку раскроет меню. Там есть пункт Настройки или Options.
В категории Text можно выставить настройки локали (locale и Character set). Изначально там не выбрано ничего.
Установка значений как раз и приводит к созданию файла .minttyrc в домашнем каталоге.
Проверить очень просто: создайте пару текстовых файлов в разных кодировках с русским текстом и выведите их содержимое на экран командой cat. Будет видно, что без выставленных настроек содержимое файла в utf-8 нормально не отображается, хотя команда locale показывает "ru_RU". С выставленными настройками команда locale должна показать "ru_RU.UTF-8".
Тот факт, что у Вас locale показывала C.UTF-8 говорит о том, что по умолчанию подцепилась локаль C. Уж не знаю, почему. Разве что Windows у Вас на английском языке. Но очевидно, что C.UTF-8 для работы с русским текстом недостаточно.

UPD: А, нет. Проверка показала, что при явном выборе C.UTF-8 содержимое файла с русским текстом на экран выводится нормально.
А вот при пустых настройках - нет.
Да, забыл уточнить. Учитывая то, как java взаимодействует с нативной виндовой командной строкой (вывод в кодировке 1251 при настройках 866),
может быть важным, какую версию jdk Вы используете. Я брал последнюю - jdk-15 с сайта Oracle. Есть ещё OpenJDK, но это я не проверял.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
UnixNoob
Сообщения: 167
ОС: Slackware

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

Сообщение UnixNoob »

Hephaestus, я вчера нашел информацию что sdk использует системную кодировку windows. Эта информация,как мне кажется, подтверждается тем что в Cygwin,без указания явной кодировки компилятору java UTF-8, иероглифы одни,а с указанием - другие. В 7ке нет еще выбора кодировки,в 10ке добавляли как тестовую. Вопрос конечно почему Cygwin не отображает русские буквы при явном указании компилятору Utf-8. У меня есть одно предположение, что возможно мешает замена системного файла из-за лицензии Windows, т.к VirtualBox ругался на это, хоть и немного про другое программы. Jdk изначально стояли open,но при замене на 11,14 или 15 от Oracle ситуация не изменилась.

"C" locale я изначально ставил т.к в руководстве по Cygwin так было указано, но смена на ru,с верным выводом locale не дает ничего. Это от части причина, почему я не хочу Debian,Suse или Ubuntu, чтобы Linux не стал второй Windows,который работает и работает, но при появлении не совсем стандартных проблем не знаешь что делать, т.к по ключам реестра конечно есть книга, хоть и не полная, как и по политикам настройки, но оказывается быстрее переустановить, чем источник найти.

В целом спасибо за столь активную помощь, но думаю я быстрее Linux поставлю, чем разберусь какой ключ реестра или файл не нравится Cygwin.
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3374
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

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

Сообщение Hephaestus »

UnixNoob писал:
12.10.2020 12:27
я вчера нашел информацию что sdk использует системную кодировку windows
Похоже на правду. Но вообще, это не имеет значения, так как есть возможность использовать UTF-8.
UnixNoob писал:
12.10.2020 12:27
В 7ке нет еще выбора кодировки,в 10ке добавляли как тестовую.
Это Вы о чём? О Win7 и Win10?
В Win7 совершенно точно есть возможность сохранить файл в utf-8, используя даже notepad.exe.
В других редакторах (vim, geany, NP++) - тем более.
UnixNoob писал:
12.10.2020 12:27
Вопрос конечно почему Cygwin не отображает русские буквы при явном указании компилятору Utf-8.
Отображает. Я ж Вам выше писал. Проверено.
UnixNoob писал:
12.10.2020 12:27
У меня есть одно предположение, что возможно мешает замена системного файла из-за лицензии Windows, т.к VirtualBox ругался на это, хоть и немного про другое программы.
Так у Вас винда не на реальном железе? На виртуалке? Да ещё и не оригинальная?
Ну в такой, конечно, много чего может быть. Я такие варианты не рассматриваю.
UnixNoob писал:
12.10.2020 12:27
"C" locale я изначально ставил т.к в руководстве по Cygwin так было указано, но смена на ru,с верным выводом locale не дает ничего. Это от части причина, почему я не хочу Debian,Suse или Ubuntu, чтобы Linux не стал второй Windows,который работает и работает, но при появлении не совсем стандартных проблем не знаешь что делать
Сравнивать cygwin под пиратской виндой на виртуалке и нормальную linux-систему - это, конечно, сильно.
Я думаю, Вы и без меня понимаете, что это сравнение начисто лишено смысла.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
UnixNoob
Сообщения: 167
ОС: Slackware

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

Сообщение UnixNoob »

Hephaestus писал:
12.10.2020 13:04
Это Вы о чём? О Win7 и Win10?
В Win7 совершенно точно есть возможность сохранить файл в utf-8, используя даже notepad.exe.
В других редакторах (vim, geany, NP++) - тем более.
Я про Windows 7 и 10. И вот про это, нашел в обсуждениях касательно кодировки по умолчанию:
Кроме того, в региональных настройках у меня включена опция Beta: Use Unicode UTF-8 for worldwide language support, которая предполагает использование UTF-8 в качестве стандартной кодировки, если я правильно понял смысл этого параметра.
Hephaestus писал:
12.10.2020 13:04
Отображает. Я ж Вам выше писал. Проверено.
У меня не отображает, я понял что это проблема моей копии Windows скорее всего.
Hephaestus писал:
12.10.2020 13:04
Так у Вас винда не на реальном железе? На виртуалке? Да ещё и не оригинальная?
Ну в такой, конечно, много чего может быть. Я такие варианты не рассматриваю.
Нет, на реальном железе стоит 7ка, а в ней стоит VBox, который при нажатии кнопки "запустить виртуальную машину" ругается, и по коду я нашел что это из-за подмены системного файла. В итоге запуск работает только если выбрать "запуск в фоне",а затем "показать"
Отсюда я и упомянул vbox. :)
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3374
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

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

Сообщение Hephaestus »

UnixNoob писал:
12.10.2020 14:25
Я про Windows 7 и 10. И вот про это, нашел в обсуждениях касательно кодировки по умолчанию:
Кроме того, в региональных настройках у меня включена опция Beta: Use Unicode UTF-8 for worldwide language support, которая предполагает использование UTF-8 в качестве стандартной кодировки, если я правильно понял смысл этого параметра.
У меня на рабочей Win7 32bit такой настройки нет. А сохранение файлов в utf-8 в notepad.exe тем не менее есть.
И вариант cp65001 в виндовой консоли тоже есть.
Работу java я проверял на Win7 64 bit, поскольку jdk для win доступен только в этом варианте.
Возможно, в win7 64bit эта настройка присутствует (и может быть даже включена по умолчанию), но я не смотрел, и даже не знал о её существовании.
UnixNoob писал:
12.10.2020 14:25
У меня не отображает
Но хотя бы содержимое текстового файла в utf-8 удается вывести на экран в терминале cygwin?
UnixNoob писал:
12.10.2020 14:25
я понял что это проблема моей копии Windows скорее всего.
Если у Вас не оригинальная винда, а какая-нибудь сборка, то там, конечно, много чего может быть не так.
Но вообще, это странно как-то.
У меня helloworld на java, исходник в utf-8. В терминале cygwin текст выводится при условии, что локаль ru_RU.UTF-8.
В родной виндовой консоли текст тоже выводится, но с указанием кодировки компилятору.
Это два принципиально разных варианта. Оба работают.
Если у Вас работает вариант с виндовой консолью, и не работает cygwin, значит, дело в cygwin. И тогда проблема с utf-8 будет не только у java-программы.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Kopilov
Сообщения: 730
ОС: [K]Ubuntu, Debian

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

Сообщение Kopilov »

Так, проходя мимо.
Локаль C.UTF-8 (в комбинации с Java, но это не точно) работает весьма странно. При этом ru_RU.UTF-8 и en_US.UTF-8 фокусов не выкидывают.

Прецедент: библиотека RCaller — запуск R из Java. Автор попросил меня (как соучастника проекта) сделать CI на Github Actions. Почти всё получилось, но долгое время не мог запуститься один тест, на символы из UTF-8, отсутствующие в ASCII. При переключении на en_US.UTF-8 (или ru_RU.UTF-8) работает нормально. То, что в Github Actions по умолчанию стоит C.UTF-8, обнаружилось методом тыка (раньше я про такую не знал). Заставить тест отрабатывать на C.UTF-8 пока так и не удалось. Последнее, что удалось увидеть (последние пробы я гонял в локальном докере, в пайплайнах гитхаба их нет): R, запущенный из Java, запущенной в системе с локалью C.UTF-8 говорит, что у него локаль C (просто C, без UTF-8, а так же без LC_NUMERIC и этого всего). R, запущенный напрямую, видит локаль C.UTF-8 и все её "детали".
Спасибо сказали:

Аватара пользователя
UnixNoob
Сообщения: 167
ОС: Slackware

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

Сообщение UnixNoob »

Hephaestus писал:
12.10.2020 15:28
У меня на рабочей Win7 32bit такой настройки нет.
Это настройка в 10ке появилась какой-то.
Hephaestus писал:
12.10.2020 15:28
А сохранение файлов в utf-8 в notepad.exe тем не менее есть.
Тоже есть.
Hephaestus писал:
12.10.2020 15:28
Но хотя бы содержимое текстового файла в utf-8 удается вывести на экран в терминале cygwin?
Cat выводит всё нормально, Vim по умолчанию в UTF-8 сохраняет.
Hephaestus писал:
12.10.2020 15:28
Если у Вас работает вариант с виндовой консолью, и не работает cygwin, значит, дело в cygwin. И тогда проблема с utf-8 будет не только у java-программы.
В Windows работает вариант с указанием компилятору кодировки UTF-8. Не знаю что еще смотреть.

Дополнение
В VBox стояла Windows Server 2012 и Suse, поставил на первую Cygwin - такие же каракули получились, в Suse всё нормально. Интересная конечно проблема нарисовалась, учитывая что у вас всё работает в аналогичном сценарии,но это уже напоминает издевательство, проще вон в Linux через VBox делать или поставить дистрибутив Linux.
Спасибо сказали:

Аватара пользователя
ormorph
Сообщения: 1371
ОС: Gentoo

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

Сообщение ormorph »

UnixNoob писал:
12.10.2020 20:41
или поставить дистрибутив Linux
Ага, либо взять наиболее дешевый raspberry pi 4 и на нем работать. Можно даже Gentoo установить (genpi64). Но тогда брать вариант с памятью минимум 4 гб. Лучше всего с таким охлаждением брать вариант. Для java все равно будет.
Спасибо сказали:

Аватара пользователя
UnixNoob
Сообщения: 167
ОС: Slackware

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

Сообщение UnixNoob »

ormorph
Да, малинку я когда-нибудь хочу приобрести, хотя бы ради посмотреть,но для вопроса этой темы у меня техники хватает. Изначально задача была проста, как мне казалось, cygwin с vim и путь до java jdk, это уж так получилось что в итоге мое желание не сбылось и надо будет сделать иначе. Ничего страшного, всякое бывает. Я узнал чуть больше про кодировки, тоже полезно :)
Спасибо сказали:

Аватара пользователя
ormorph
Сообщения: 1371
ОС: Gentoo

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

Сообщение ormorph »

UnixNoob писал:
13.10.2020 17:59
Да, малинку я когда-нибудь хочу приобрести, хотя бы ради посмотреть,но для вопроса этой темы у меня техники хватает.
Ну мне лично raspberry pi 4 под gentoo(genpi64) понравилась, работает довольно не плохо. Для Java можно использовать ide code-oss(открытая сборка vscode), довольно не плохо работает с модулем "eclipse new java project". Для Gentoo делал ебилд тыц. Кстати в этой проге классы запускаются командой:

Shell

$ java -Dfile.encoding=UTF-8
Спасибо сказали:

Аватара пользователя
UnixNoob
Сообщения: 167
ОС: Slackware

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

Сообщение UnixNoob »

Нашел простое решение проблемы, которое описано в книге "Философия Java".
Оно заключается в отправке вывода команды "java" в файл.
Пишем:

Код: Выделить всё

java *Название программы* > *Название программы*.txt 
и можем спокойно увидеть с помощью cat вывод в нормальной кодировке.
Что-то об этом не подумалось, когда занимался этим вопросом.
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3374
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

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

Сообщение Hephaestus »

UnixNoob писал:
01.11.2020 16:52
Нашел простое решение проблемы
Это костыль на самом деле.
Вы изучаете язык Java. Изучаете ведь, я правильно понимаю?
Раньше или позже у Вас появится задача по организации диалога между пользователем и программой в терминале
(на экран выводится запрос, с клавиатуры вводится ответ)
и вот тут окажется, что ввод-вывод через текстовые файлы не всегда удобен, хотя во многих случаях возможен.

А вот почему Вы не используете нормальную систему вместо всяких вот этих костылей, я понять не могу.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
UnixNoob
Сообщения: 167
ОС: Slackware

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

Сообщение UnixNoob »

Hephaestus писал:
02.11.2020 07:31
А вот почему Вы не используете нормальную систему вместо всяких вот этих костылей, я понять не могу.
Я постепенно перехожу.Тяжело с настроенной и привычной системы сразу уйти в Linux. Банально не всегда есть время производить настройку Linux. Нет привычки читать документацию, не знаешь на что обращать внимание, а что не имеет значения.
К примеру у меня есть раздел где лежит музыка и прочие файлы, которые я использую,но раздел ntfs.
Мне нужно ставить ntfs-3g, но я не имел с ним дел и банально боюсь испортить раздел,а значит нужно на всякий случай его скопировать.
Спасибо сказали:

Аватара пользователя
bormant
Сообщения: 1266

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

Сообщение bormant »

UnixNoob писал:
02.11.2020 13:01
ставить ntfs-3g
Если про Slackware, то ntfs-3g уже в комплекте. И даже установщик спрашивает, как и куда подключить ваш NTFS раздел ;-)
UnixNoob писал:
02.11.2020 13:01
нужно на всякий случай его скопировать
А вот это правильно, вне зависимости от чего-либо еще.
Спасибо сказали: