2016-01-11 4 views
0

Я получаю разные результаты по двум различным системам и не знаю почему.java.util.Properties encoding

Properties prop = new Properties(); 
prop.load(new ByteArrayInputStream(input)); //input is byte[] 

На обоих входах системы содержится "var=\\u00C4\\u00DC\\u00D6\\u00E4\\u00FC\\u00F6".

На моей тестовой опоре системы содержится "var=ÄÜÖäüö". (Это то, что я хочу)

На другой опоре системы содержится "var=\xC4\xDC\xD6\xE4\xFC\xF6". Это input в шестнадцатеричном формате, но почему это делает Properties? Я, к сожалению, ничего не знаю о другой конфигурации системы.

Есть ли у кого-нибудь представление о причине?

+0

Вы должны попытаться отобразить коды ASCII. Я предполагаю, что у вас одинаковые значения в обеих системах, но не удается выполнить его из-за кодировки по умолчанию в платформе. –

+0

Как вы показываете значения? Различие в каждой системе? – immibis

ответ

3

Файлы Java .properties кодируются ISO-8859-1 (Latin-1), а не UTF-8. Все символы, отличные от латинского-1, должны вводиться с использованием escape-символов Unicode, например. \uHHHH.

Альтернативой является использование формата XML для свойств, которые IS UTF-8.

Source: Javadoc

Also see this SO question

And this one

+0

Спасибо, Стюарт за ваш ответ. Я знаю, что мой байт [] должен быть ISO-8859-1. Я использую, например, «\\ u00C4» для установки «Ä». Но prob.toString() должен дать мне закодированное значение ("var = ÄÜÖäüö"). Но в иностранной системе это «var = \ xC4 \ xDC \ xD6 \ xE4 \ xFC \ xF6». Я не знаю почему. – unknown

+1

Чтобы закончить ответ, мы можем заметить, что это будет изменено с помощью Java 9. См. Http://openjdk.java.net/jeps/226 – Prim

+0

@unknown. Мне кажется, вам нужно рассказать нам что-то о том, что между системами. C4, безусловно, правильный код. http://www.htmlhelp.com/reference/html40/entities/latin1.html – Stewart