Проблема кодирования файлов на платформе компилятора Java

Недавно я столкнулся с проблемой кодировки символов файла, с которой я не помню, чтобы когда-либо сталкивался. Это' Очень часто приходится знать кодировку символов текстовых файлов и писать код, который правильно обрабатывает кодирование при запуске на разных платформах. Но обнаруженная мной проблема была вызвана компиляцией на платформе, отличной от платформы выполнения. Это было совершенно неожиданно, потому что по моему опыту, когда javac создает файл класса, важными параметрами являются параметры источника и цели java, а также версия JDK, выполняющая компиляцию. В моем случае классы, скомпилированные с JDK 1.6.0_22 в Mac OS X, вели себя иначе, чем классы, скомпилированные с 1.6.0_23-b05 в Linux, при запуске в Mac OS X. Указанные источник и цель были 1.4.

Строка, которая был закодирован как ISO-8859_1 в памяти был записан на диск с помощью метода println PrintStream. В зависимости от того, на какой платформе был Скомпилирован код Java, строка была написана иначе. Это привело к ошибке. Исправление ошибки заключалось в том, чтобы явно указать кодировку файла при записи и чтении файла.

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

Кто-нибудь сталкивался с этой конкретной проблемой? Казалось бы, это плохо для любого кода Java, который читает и записывает строки в файл без явного указания кодировки символов. И как часто это делается?

8
задан Mark Rotteveel 27 November 2018 в 18:51
поделиться