powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как научить java.util.Properties русскому языку?
22 сообщений из 22, страница 1 из 1
Как научить java.util.Properties русскому языку?
    #39505587
Фотография RSman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть 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
Как научить java.util.Properties русскому языку?
    #39505589
Фотография RSman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
файлик из аттача не качайте, он наверняка где-то в процессе перекодируется.
Его содержимое - строка в кодировке windows-1251
Код: plaintext
russiantext=Русский текст
...
Рейтинг: 0 / 0
Как научить java.util.Properties русскому языку?
    #39505593
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используйте 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
Как научить java.util.Properties русскому языку?
    #39505601
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чтобы понять как должна быть записана кирилица в пропертис файле
воспользуйтесь Properties.store(OutputStream out, String comments)


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


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

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

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

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

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

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

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

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

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


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