2011-01-20 54 views
2

我使用HtmlCleaner來刮掉Android中的ISO-8859-1編碼網站。非英文字符在Android上使用HtlmCleaner解碼不正確

我已經在導入到我的Android應用程序的外部文件jar中實現了這一點。

當我在Eclipse中運行單元測試時,它處理挪威字母(æ,ø,å)正確(我可以在調試器中驗證),但在Android應用程序中,這些字符看起來像倒轉的問號。

如果我將調試器附加到我的Android應用程序,那麼在Eclipse中運行單元測試時,可以發現這些字母在他們很好的相同位置是不正確的,所以它不是Android中的顯示/呈現/視圖問題應用程序。

當我複製從調試器的文本,我得到這些結果:

Java進程(單元測試):«Blårek»,«尼»

Android的過程(在模擬器): «Bl rek»,« Benny »

我希望這些St戒指是平等的,但請注意Android中反轉問號是如何重複「å」的。

我試過運行htmlCleaner.getProperties().setRecognizeUnicodeChars(true)沒有任何運氣。另外,我沒有找到在html清理器中強制使用UTF-8或ISO-8859-1編碼的方法,但我不確定這是否會有所作爲。

下面是我的代碼運行:

HtmlCleaner htmlCleaner = new HtmlCleaner(); 

// connect to url and get root TagNode from HtmlCleaner 
InputSteram is = new URL(url).openConnection().getInputStream(); 
TagNode rootNode = htmlCleaner.clean(is); 

// navigate through some TagNodes, getting the ContentNode 
ContentNode cn = rootNode... 

// This String contains the incorrectly decoded characters on Android. 
// Good in Oracle JVM though.. 
String value = cn.toString().trim(); 

有誰知道什麼可能導致解碼behavoir是在Android上有什麼不同?我猜這兩個環境的主要區別在於Android應用程序使用Android的java.io堆棧,而我的單元測試使用Sun/Oracle的堆棧。

感謝,
蓋爾

回答

0

HtmlCleaner不能告訴使用什麼編碼;您只傳遞InputStream中的響應正文,但編碼位於「內容類型」標題中。

您可以將set the character encoding關於HtmlCleaner的屬性改爲來自HTTP連接的正確編碼。但是這需要你從內容類型頭解析正確的參數。或者,您可以pass a URL instance to HtmlCleaner並讓它管理連接。然後,它將有權訪問所有需要正確解碼的信息。

相關問題