Страницы

Поиск по вопросам

понедельник, 10 июня 2019 г.

Не отображаются кириллические символы в терминале Debian у программ на Java скомпилированных в Win10

Собственно установил я себе недавно Debian 9, не смотря на то что в линуксе новичек проблем особых не было. Установил себе jdk 8 от Oracle решил проверить работоспособность и получил странный результат, те файлы которые я создал и скомпелировал в линуксе отображают кирилицу в консоле без проблем.
Файлы же скомпилированные в Win10 показывают всякую ерунду. Хотя сама консоль настроена и работает верно, локаль и utf 8 итд.
И в win10 и debian создавал файлы в sublime text 3.
В чем может быть проблема?
PS: В java и debian новичек так что это может быть стандартная ошибка.

Извиняюсь что не получилось ответить сразу, да это скорей всего из-за кодировки. Но из-за какой именно кодировки я так и не понял.
Провел небольшой тест: Создал три файла, все три сделал в SublimeText3 и сохранил с кодировкой UTF-8. Вот что было внутри.
class Test_Win10_Default { public static void main(String[] args) { System.out.println("ABCabc"); System.out.println("АБВабв"); System.out.println("àéèç"); } }
Первый файл скомпилировал в командной строке WIN10, второй файл был скомпилирован там-же в командной строке, но перед этим я написал команду chcp 65001 поменяв кодировку командной строки на UTF-8. Результат такой, оба файла отображали символы корректно толь после того как я менял кодировку, при это закрывая командную строку кодировка не сохранялась и приходилось опять вводить команду на её смену.
Далее, я перешел в Debian и создал файл с точно таким же кодом, там всё работало нормально. Файлы созданные в Виндовс не работали, оба. Перейдя же обратно в Виндовс я обнаружил что третий файл созданный в Линукс не работает в Виндовс. Даже после смены кодировки терминал отображал первые две строки, а вот третью с французскими буквами, он не понимал.
В общем я запутался в конец. Неужели нет способа поставить одну кодировку Юникод в обеих системах чтобы больше не думать о таких вещах?


Ответ

По умолчанию компилятор использует системную кодировку. В Windows это cp1251. Поэтому собранные под Windows классы показывают крякозяблы. Чтобы этого избежать, необходимо явно указать компилятору какую кодировку использовать
javac -encoding utf-8 Test_Win10_Default.java
Впрочем, вывести символ à в консоль cmd вам это всё равно не поможет. Ничто не поможет нормально выводить двухбайтовую кодировку в консоль заточенную под использование однобайтовой cp866.

Комментариев нет:

Отправить комментарий