2016-01-11 72 views
0

我在兩個不同的系統上得到不同的結果,不知道爲什麼。java.util.Properties編碼

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

在兩個系統上輸入包含"var=\\u00C4\\u00DC\\u00D6\\u00E4\\u00FC\\u00F6"

在我的測試系統prop中包含"var=ÄÜÖäüö"。 (這是我想要的)

在另一個系統上prop包含"var=\xC4\xDC\xD6\xE4\xFC\xF6"。這是十六進制的input,但爲什麼Properties這樣做?不幸的是我對其他系統配置一無所知。

有人有關於這個原因的想法嗎?

+0

你應該嘗試顯示ASCII碼。我的猜測是,你在兩個系統上都有相同的值,但由於平臺的默認編碼而無法呈現它。 –

+0

你如何顯示值?每個系統都不一樣嗎? – immibis

回答

3

Java .properties文件編碼爲ISO-8859-1Latin-1),而不是UTF-8。所有非拉丁文-1字符必須使用Unicode轉義字符輸入,例如\uHHHH

另一種方法是使用XML格式的屬性,即IS UTF-8

Source: Javadoc

Also see this SO question

And this one

+0

謝謝你的回答。我知道我的byte []輸入必須是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

相關問題