Java 使用HtlmCleaner在Android上对非英语字符进行错误解码
我正在使用Java 使用HtlmCleaner在Android上对非英语字符进行错误解码,java,android,encoding,html-parsing,Java,Android,Encoding,Html Parsing,我正在使用HtmlCleaner在Android中创建一个ISO-8859-1编码的网站 我已经在导入Android应用程序的外部jar文件中实现了这一点 当我在Eclipse中运行单元测试时,它会处理挪威字母(æ,ø,å)是否正确(我可以在调试器中验证这一点),但在Android应用程序中,这些字符看起来像倒置的问号 如果我将调试器连接到我的Android应用程序,我可以看到这些字母在从Eclipse运行单元测试时正确的位置不正确,因此Android应用程序中没有显示/渲染/视图问题 当我从调
HtmlCleaner
在Android中创建一个ISO-8859-1
编码的网站
我已经在导入Android应用程序的外部jar
文件中实现了这一点
当我在Eclipse中运行单元测试时,它会处理挪威字母(æ,ø,å
)是否正确(我可以在调试器中验证这一点),但在Android应用程序中,这些字符看起来像倒置的问号
如果我将调试器连接到我的Android应用程序,我可以看到这些字母在从Eclipse运行单元测试时正确的位置不正确,因此Android应用程序中没有显示/渲染/视图问题
当我从调试器复制文本时,会得到以下结果:
Java过程(单元测试):«Blårek»,«Benny»
Android进程(在模拟器中):«Bl�雷克»,«本尼»
我希望这些字符串是相等的,但请注意“å”在Android中是如何被倒过来的问号重放的
我尝试过运行htmlCleaner.getProperties().setRecognizeUnicodeChars(true)
,但没有任何运气。此外,我还没有发现在html cleaner中强制使用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的堆栈
谢谢,Geir
HtmlCleaner
无法判断要使用什么编码;您只在InputStream
中传递响应的主体,但编码在“content-type”标题中
您可以从HTTP连接将
HtmlCleaner
的属性更改为正确的编码。但这需要您从content-type头解析正确的参数。或者,您可以让它管理连接。然后,它将能够访问需要正确解码的所有信息。HtmlCleaner
无法判断要使用什么编码;您只在InputStream
中传递响应的主体,但编码在“content-type”标题中
您可以从HTTP连接将HtmlCleaner
的属性更改为正确的编码。但这需要您从content-type头解析正确的参数。或者,您可以让它管理连接。然后,它将能够访问需要正确解码的所有信息