Как добавить строку utf-8 в файл свойств - PullRequest
0 голосов
/ 09 января 2012

Как добавить строку utf-8 в файл свойств.Я дал код ниже.

public  static void addNewAppIdToRootFiles() {
Properties properties = new Properties();       
   try {
       FileInputStream fin = new FileInputStream("C:\Users\sarika.sukumaran\Desktop\root\root.properties");
       properties.load(new InputStreamReader(fin, Charset.forName("UTF-8")));
       String propertyStr = new String(("قسيمات").getBytes("iso-8859-1"), "UTF-8");
       BufferedWriter bw = new BufferedWriter(new FileWriter(directoryPath + rootFiles, true));
       bw.write(propertyStr);
       bw.newLine();
       bw.flush();
       bw.close(); 
       fin.close();           

   } catch (Exception e) {
       System.out.println("Exception : " + e);
   }
} 

Но когда я открываю файл, строка, которую я написал «قسيمات» в файл, отображается как «??????».Пожалуйста, помогите мне.

Ответы [ 2 ]

2 голосов
/ 09 января 2012

Хорошо, я проверил спецификацию для Свойства класса. Если вы используете следующие методы: 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 ...

Ссылки:

2 голосов
/ 09 января 2012

ОК, ваша первая ошибка getBytes("iso-8859-1"). Вы не должны делать эти манипуляции вообще. Если вы хотите записать текст Unicode в файл, вы должны открыть файл и написать текст. Внутреннее представление строк в java уникально, поэтому все будет правильно написано.

Вы должны заботиться о кодировке, когда вы читаете файл . Кстати, вы делаете это правильно.

Но вам не нужно использовать инструменты манипулирования файлами, чтобы добавить что-то к файлу свойств. Вы можете просто позвонить prop.setProperty("yourkey", "yourvalue"), а затем позвонить prop.store(new FileOutputStream(youfilename)).

...