2017-02-17 71 views
2

我從API響應中得到String,我必須在TextView中顯示。該String看起來是這樣的:Java字符串不顯示德語變音符號

enter image description here

它應該是「柏靈」,但德國人性格ü沒有被代表。

問題是我不知道String是如何在服務器上編碼的。

我試過把它轉換成UTF-8,windows-1252ISO-8859-1在所有可能的組合中沒有成功。

我也看到了這篇大文章:

What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text

這裏是一些我已經試過鏈接:

How do I convert between ISO-8859-1 and UTF-8 in Java?

Java convert Windows-1252 to UTF-8, some letters are wrong

Encode String to UTF-8

有沒有人有想法?
謝謝。

編輯:

我找到了原因。解析來自API的響應,我只是說這個:

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), Charset.forName("ISO-8859-15"))); 

之前,它是這樣的:

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); 

現在ü字符正確顯示。

非常感謝所有的評論,它使我在正確的方向上進行研究。

+3

我們不知道如何從服務器獲取數據 - 這是重要的部分之一。請給更多的上下文。 –

+1

'我從API響應中獲得一個字符串'這就是問題所在。該API很可能使用默認的Windows編碼:CP1252。相反,您需要將值作爲UTF-8正確返回。 –

+1

如果HTTP頭中沒有信息,您是否嘗試[chardet](http://chardet.readthedocs.io/en/latest/usage.html)? – pskink

回答

2

我認爲,在你真正知道服務器正在使用哪個字符集之前,盲目地嘗試轉換爲隨機字符集對你沒有任何好處。

您應該推斷API從Content-type響應頭中發送的字符集。或者甚至要求提供一個。

相關問題