Доброго времени суток. Есть проблема с чтением файла Properties
, содержащего русские буквы. Слово Нахабино считывается как ???°???°?±??????. Вот код:
Properties mProperties = new Properties();
mProperties.load(new FileInputStream(desktop + "pr.properties"));
System.out.println(mProperties.getProperty("setA"));
Пробовал при помощи Notepad++ менять кодировку файла на Asii, UTF-8, UTF-8 без BOM, UCS2, и ещё несколько. Результат - в одной кодировке вопросики и плюсики, в другой квадратики и кружочки и т.д. Помогите исправить ошибку.
Согласно стандарту, .properties
файлы содержат текст в кодировке ISO 8859-1. Это создает определенные трудности при работе с кириллическими символами, т.к. все тот же стандарт предписывает кодировать их как escape-последовательности Unicode. Что выглядит не очень читабельно:
some.key=\u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435
К счастью, IDE имеют функциональность (встроенную или через плагины) для прозрачного преобразования кодировки, называемую native-to-ascii conversion. Благодаря этому, вы можете при редактировании видеть в IDE понятный текст:
some.key=Значение
который будет фактически преобразован в текст из предыдущего примера.
При загрузке файла через класс Properties
вы будете иметь дело уже с java-строками в Unicode и кириллица там будет такая, как вы ожидаете.
Я создал вот такой прекрасный класс:
private class MyProperties {
private File mFile;
private ArrayList<String> keys = new ArrayList<String>(), values = new ArrayList<String>();
MyProperties() throws Throwable {
// FileInputStream fis...
// загружаем в массивы keys и values значения
}
synchronized ArrayList<String> keySet() {
return this.keys;
}
synchronized String getProperty(String key, String defaultValue) {
for (int i1 = 0; i1 < this.keys.size(); i1++) {
if (this.keys.get(i1).equals(key)) {
return this.values.get(i1);
}
}
return defaultValue;
}
synchronized void setProperty(String key, String value) throws Throwable {
this.values.set(this.keys.indexOf(key), value);
DataOutputStream out = new DataOutputStream(new FileOutputStream(this.mFile));
for (int i1 = 0; i1 < this.keys.size(); i1++) {
out.writeBytes(this.keys.get(i1) + "=" + this.values.get(i1));
}
out.flush();
out.close();
}
}
жить с ним просто чудо. Не надо теперь париться по поводу каких-то кодировок и русских букв. Читает всё подряд.
Виртуальный выделенный сервер (VDS) становится отличным выбором
При подключении шрифта из google fonts, начинают смещаться соседние элементы от элементов с установленным шрифтомЧто за косяки? первую проблему...