Хорошо, я проверил спецификацию для Свойства класса. Если вы используете следующие методы: load()
для входного потока или store()
для выходного потока, для потока ввода-вывода для файла по умолчанию принимается кодировка iso-8859-1. Поэтому вы должны быть осторожны с несколькими вещами:
Некоторые символы на французском, немецком и португальском языках совместимы с iso-8859-1 (Latin1), и они нормально работают в iso-8859-1. Таким образом, вам не нужно беспокоиться так много. Но другие, такие как арабские и ивритские символы, не совместимы с Latin1, поэтому вам нужно быть осторожным с выбором кодировки для этих символов. Если у вас смешанные символы французского и арабского языков, у вас нет другого выбора, кроме как использовать Юникод.
Какова текущая кодировка вашего входного файла, если он уже существует для использования с методом load()
в Свойствах? Если это не значение по умолчанию iso-8859-1, вам необходимо выяснить, что это такое, прежде чем открывать файл. Если кодировка файла infile
- UTF-8, тогда используйте properties.load(new InputStreamReader(new FileInputStream("infile"), "UTF8")));
. Затем придерживайтесь этой кодировки до конца. Сопоставьте кодировку файла с кодировкой символов.
Если это новый входной файл, который будет использоваться с методом load()
Properties, выберите кодировку файла, которая работает с кодировкой вашего персонажа. Затем придерживайтесь этой кодировки до конца.
Ваша ожидаемая кодировка выходного файла должна совпадать с той, которая используется в методе Properties load()
, прежде чем использовать метод store()
. Если это не стандартная версия iso-8859-1, то перед сохранением файла вам нужно выяснить, что это такое. Придерживайтесь этой кодировки до конца. Сопоставьте кодировку файла с кодировкой символов. Если outfile
кодировка файла - UTF-8, то, в частности, используйте кодировку UTF-8 при сохранении файла. Но если метод store()
по-прежнему заканчивается выходным файлом в кодировке iso-8859-1, то вам нужно сделать то, что предложено далее ...
Если вы придерживаетесь iso-8859-1 по умолчанию, он отлично работает для таких символов, как французский. Но, если символы несовместимы с кодировкой iso-8859-1 или Latin1, вместо них необходимо использовать escape-символы Unicode: например: \uFE94
для арабского ﺔ
символа. Для меня это экранирование слишком утомительно, и обычно мы используем утилиту native2ascii
, предоставленную в JRE или JDK, чтобы преобразовать файл свойств из одной кодировки в другую кодировку. Конечно, есть и другие способы ... просто проверьте ссылки ниже ... Для меня лучше использовать файл свойств в формате XML, поскольку по умолчанию это UTF-8 ...
Ссылки: