Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как научить java.util.Properties русскому языку? / 22 сообщений из 22, страница 1 из 1
15.08.2017, 13:40
    #39505587
RSman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить java.util.Properties русскому языку?
Есть ini-файлик. с русским текстом. Хотел его считывать с помощью java.util.Properties, а он мне вопросики выдаёт. Как это можно вылечить с наименьшим количеством затрат?
Вот такой код, например,
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
package test;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.Properties;
import org.apache.commons.io.IOUtils;

public class test { 
	public static void main (String[] args) throws Exception{
	  Properties props = new Properties();
	
	 File prpFile = new File("config.cfg");
	 props.load(new FileInputStream(prpFile));
	 InputStreamReader r = new InputStreamReader(new FileInputStream(prpFile));
	 String result = IOUtils.toString(r);
	 System.out.println(result);
	 System.out.println(r.getEncoding());
	 String russiantext =  props.getProperty("russiantext"); 
	 System.out.println(System.getProperty("file.encoding"));
	 System.out.println(Charset.defaultCharset());
	 System.out.println("Это русский текст:" + russiantext);
	}
}


Возвращает такое:
Код: plaintext
1.
2.
3.
4.
russiantext=Русский текст
Cp1251
Cp1251
windows-1251
Это русский текст:??????? ?????

сам файлик в аттаче
...
Рейтинг: 0 / 0
15.08.2017, 13:42
    #39505589
RSman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить java.util.Properties русскому языку?
файлик из аттача не качайте, он наверняка где-то в процессе перекодируется.
Его содержимое - строка в кодировке windows-1251
Код: plaintext
russiantext=Русский текст
...
Рейтинг: 0 / 0
15.08.2017, 13:49
    #39505593
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить java.util.Properties русскому языку?
Используйте Properties.load(Reader) и не брезгуйте чтением документации

RTFMpublic void load( InputStream inStream )
throws IOException

Reads a property list (key and element pairs) from the input byte stream. The input stream is in a simple line-oriented format as specified in load(Reader) and is assumed to use the ISO 8859-1 character encoding; that is each byte is one Latin1 character. Characters not in Latin1, and certain special characters, are represented in keys and elements using Unicode escapes as defined in section 3.3 of The Java™ Language Specification.

Но будьте внимательны. Ваш файл имеет кодировку cp1251, а ваш код использует дефолтную системную кодировку. Что может привести к эффекту "а у меня работает".
Поэтому если у вас ресурсы строго прибиты к cp1251, то нужно и указывать cp1251 явно при загрузке этих ресурсов.
И желательно перейти на UTF-8.

Есть и ещё одно решение. Утилитой native2ascii можно конвертировать файл в Latin1/Unicode. Тогда он будет полностью независим от настроек системы.
...
Рейтинг: 0 / 0
15.08.2017, 13:57
    #39505601
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить java.util.Properties русскому языку?
чтобы понять как должна быть записана кирилица в пропертис файле
воспользуйтесь Properties.store(OutputStream out, String comments)


можно использовать xml формат пропертис файла и пользовать loadFromXML(InputStream in) для вычитки.
тогда кодировку можно указать в xml файле.
и кирилицу можно писать как-есть в указанном формате без доп преобразований внешними утилитами.
...
Рейтинг: 0 / 0
15.08.2017, 14:12
    #39505613
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить java.util.Properties русскому языку?
Dmitry.чтобы понять как должна быть записана кирилица в пропертис файле
воспользуйтесь Properties.store(OutputStream out, String comments)
В документации к методу детально описано как именно будет. Даже "пользоваться" не нужно.


Dmitry.можно использовать xml формат пропертис файла и пользовать loadFromXML(InputStream in) для вычитки.
тогда кодировку можно указать в xml файле.
и кирилицу можно писать как-есть в указанном формате без доп преобразований внешними утилитами.
Аха. Он её напишет в cp1251, а loadFromXML вычитает в UTF-8. Не говоря уже о том на сколько уродлив XML для Properties.
...
Рейтинг: 0 / 0
15.08.2017, 15:06
    #39505687
RSman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить java.util.Properties русскому языку?
Всем спасибо. Проще всего оказалось вместо этого использовать библиотеку ini4j
...
Рейтинг: 0 / 0
15.08.2017, 15:07
    #39505688
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить java.util.Properties русскому языку?
BlazkowiczНе говоря уже о том на сколько уродлив XML для Properties.
Точно! У него есть только один единственный плюс - можно параметры по-русски записать. :) ...ну, это, конечно, не для тех, кто обычным notepad'ом для этого пользуется.
...
Рейтинг: 0 / 0
15.08.2017, 15:10
    #39505691
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить java.util.Properties русскому языку?
RSmanВсем спасибо. Проще всего оказалось вместо этого использовать библиотеку ini4j
Да ладно!
...
Рейтинг: 0 / 0
15.08.2017, 15:13
    #39505699
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить java.util.Properties русскому языку?
GarrickТочно! У него есть только один единственный плюс - можно параметры по-русски записать. :) ...ну, это, конечно, не для тех, кто обычным notepad'ом для этого пользуется.
Это вообще зачем? Если и параметры на русском писать, то надо сразу 1С брать вместо Java.
...
Рейтинг: 0 / 0
15.08.2017, 15:15
    #39505701
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить java.util.Properties русскому языку?
BlazkowiczGarrickТочно! У него есть только один единственный плюс - можно параметры по-русски записать. :) ...ну, это, конечно, не для тех, кто обычным notepad'ом для этого пользуется.
Это вообще зачем? Если и параметры на русском писать, то надо сразу 1С брать вместо Java.
Ну, в смысле "значения параметров".
...
Рейтинг: 0 / 0
15.08.2017, 15:17
    #39505706
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить java.util.Properties русскому языку?
RSmanВсем спасибо. Проще всего оказалось вместо этого использовать библиотеку ini4j
Ну, как проще. Вы временно заткнули текущую проблему не пытаясь разобратся в её сути. И она вам ещё аукнется. Ваше приложение просто не будет работать на компьютере с другими настройками ОС.
...
Рейтинг: 0 / 0
15.08.2017, 15:22
    #39505711
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить java.util.Properties русскому языку?
GarrickНу, в смысле "значения параметров".
Так значения можно и в плоском файле. Важно только кодировку при чтении указать.
...
Рейтинг: 0 / 0
15.08.2017, 16:00
    #39505762
RSman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить java.util.Properties русскому языку?
BlazkowiczRSmanВсем спасибо. Проще всего оказалось вместо этого использовать библиотеку ini4j
Ну, как проще. Вы временно заткнули текущую проблему не пытаясь разобратся в её сути. И она вам ещё аукнется. Ваше приложение просто не будет работать на компьютере с другими настройками ОС.
Ну хорошо, а как тогда? Конвертировать файл утилитой native2ascii как-то не хочется, он читаемый должен быть.
...
Рейтинг: 0 / 0
15.08.2017, 16:13
    #39505767
am_sasa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить java.util.Properties русскому языку?
RSmanНу хорошо, а как тогда? Конвертировать файл утилитой native2ascii как-то не хочется, он читаемый должен быть. не надо никакой native2ascii, надо np++ и конвертируй в windows-1251 и обратно в UTF-8
...
Рейтинг: 0 / 0
15.08.2017, 16:23
    #39505781
RSman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить java.util.Properties русскому языку?
am_sasaRSmanНу хорошо, а как тогда? Конвертировать файл утилитой native2ascii как-то не хочется, он читаемый должен быть. не надо никакой native2ascii, надо np++ и конвертируй в windows-1251 и обратно в UTF-8
Почему "конвертируй в windows-1251", если он и так сейчас в этой кодировке?
...
Рейтинг: 0 / 0
15.08.2017, 16:25
    #39505785
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить java.util.Properties русскому языку?
RSmanНу хорошо, а как тогда?
20725013
Вы ещё и не внимательно ответы читаете. Используйте метод, который в качестве аргумента принимает Reader, а не InputStream. Для вашего случая - простейшее решение.

RSmanКонвертировать файл утилитой native2ascii как-то не хочется, он читаемый должен быть.
Ну, если это не ресурс, а внешний файл, то, может, есть смысл использовать и системную кодировку. Кто знает что там у пользователя...
...
Рейтинг: 0 / 0
15.08.2017, 16:26
    #39505786
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить java.util.Properties русскому языку?
am_sasaне надо никакой native2ascii, надо np++ и конвертируй в windows-1251 и обратно в UTF-8
Ага. А Properties.load(InputStream) понимает только Latin1. И как ему UTF поможет?
...
Рейтинг: 0 / 0
15.08.2017, 16:28
    #39505788
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить java.util.Properties русскому языку?
RSmanНу хорошо, а как тогда?Придется экранировать вручную , например:

Привет, World !!! => Привет, World !!!

Но лучше воспользоваться возможностями IDE, где уже
имеется возможность автоматического экранирования
символов при редактировании .properties файлов.
...
Рейтинг: 0 / 0
15.08.2017, 16:33
    #39505796
RSman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить java.util.Properties русскому языку?
Blazkowicz,

еще раз большое спасибо
...
Рейтинг: 0 / 0
15.08.2017, 17:34
    #39505855
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить java.util.Properties русскому языку?
BlazkowiczGarrickНу, в смысле "значения параметров".
Так значения можно и в плоском файле. Важно только кодировку при чтении указать.
В XML кодировка указана в заголовке, а как узнать в какой кодировке INI или PROPERTIES файл? Опять же при чтении properties файла в нестандартной кодировке надо очередной огород городить. В подобных случаях я голосую за XML. native2ascii конечно быстрее, а eclipse даже умеет это делать автоматически, но потом читать неудобно :). Опять же, как говорится: "на вкус и цвет....".
...
Рейтинг: 0 / 0
15.08.2017, 17:51
    #39505861
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить java.util.Properties русскому языку?
GarrickВ XML кодировка указана в заголовке, а как узнать в какой кодировке INI или PROPERTIES файл?

Жирным комментарием в заголовке. Я вообще внешние properties файлы снабжаю детальными коментариями.

GarrickОпять же при чтении properties файла в нестандартной кодировке надо очередной огород городить.

Какой ещё огород? Обычный Reader.

Garricknative2ascii конечно быстрее, а eclipse даже умеет это делать автоматически, но потом читать неудобно :). Опять же, как говорится: "на вкус и цвет....".
Да, я тоже ниразу не видел чтобы кто-то пользовался.
...
Рейтинг: 0 / 0
15.08.2017, 22:20
    #39505970
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить java.util.Properties русскому языку?
В Jetbrains есть "пимпочка". Включаешь и все проперти автоматом asci-wrap-ascii-unwrap.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как научить java.util.Properties русскому языку? / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]