Хорошо, я проверил спецификацию Свойства класс. Если вы используете следующие методы: load()
для входного потока или store()
для выходного потока, поток ввода / вывода для файла предполагается кодировкой iso-8859-1 по умолчанию. Таким образом, вы должны быть осторожны с некоторыми вещами:
Некоторые символы на французском, немецком и португальском языках совместимы с iso-8859-1 (Latin1), что нормально работает в iso-8859-1. Так что вам не о чем сильно беспокоиться. Но другие символы, такие как арабские и ивритские символы, не совместимы с Latin1, поэтому вам нужно быть осторожным с выбором кодировки для этих символов. Если у вас есть сочетание символов французского и арабского языков, у вас нет другого выбора, кроме как использовать Unicode.
Какова кодировка вашего текущего входного файла, если он уже существует для использования с методом load()
в Properties? Если это не iso-8859-1 по умолчанию, то вам нужно сначала выяснить, что это такое, прежде чем открывать файл. Если infile
кодировка файла - UTF-8, используйте properties.load(new InputStreamReader(new FileInputStream("infile"), "UTF8")));
Затем придерживайтесь этой кодировки до конца. Также сопоставьте кодировку файла с кодировкой символов.
Если это новый входной файл, который будет использоваться с методом load()
в Properties, выберите кодировку файла, которая работает с кодировкой вашего символа. Затем придерживайтесь этой кодировки до конца.
Ожидаемая кодировка выходного файла должна быть такой же, как и в методе load()
в Properties, перед тем как использовать метод 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 ...
Использованная литература:
person
ee.
schedule
09.01.2012
properties.load()
? - person Bohemian♦   schedule 09.01.2012getBytes()
, который вернет правильные точки кода Unicode для арабской строки ... - person ee.   schedule 09.01.2012root.properties
файл действительно в кодировке UTF-8, поскольку вы сделали предположение, используяCharset.forName("UTF-8")
, чтобы открыть его? Если создается новый файл, просто используйтеproperties.load(new InputStreamReader(fin));
, чтобы новый файл обрабатывался как файл в кодировке Unicode. - person ee.   schedule 09.01.2012Bit Ineed to append
? Или вы имеете в видуBit I need to append
? - person ee.   schedule 09.01.2012