我正在使用HtmlCleaner
来抓取Android中的ISO-8859-1
个编码网站。
我已在导入我的Android应用的外部jar
文件中实现了此功能。
当我在Eclipse中运行单元测试时,它处理挪威字母(æ,ø,å
)是正确的(我可以在调试器中验证),但在Android应用程序中,这些字符看起来像倒置的问号。
如果我将调试器附加到我的Android应用程序,我可以看到这些字母在从Eclipse运行单元测试时在完全相同的位置上是不正确的,所以它不是Android应用程序中的显示/渲染/视图问题
当我从调试器中复制文本时,我得到了以下结果:
Java流程(单元测试):«Blårek»,«Benny»
Android流程(在模拟器中):«Bl rek»,«Benny»
我希望这些字符串是相同的,但请注意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();
有谁知道什么可能导致解码行为在Android上有所不同?我猜这两种环境的主要区别在于Android应用程序使用Android的java.io堆栈,而我的单元测试使用Sun / Oracle的堆栈。
谢谢,
盖尔
答案 0 :(得分:0)
HtmlCleaner
无法分辨使用哪种编码;您只传递InputStream
中的响应正文,但编码位于“内容类型”标题中。
您可以set the character encoding对HtmlCleaner
的属性进行HTTP连接中的正确编码。但这需要您从内容类型标头中解析正确的参数。或者,您可以pass a URL
instance to HtmlCleaner
让它管理连接。然后,它将可以访问正确解码所需的所有信息。