我试图使用loadData()方法在WebView中显示Java String中的一些数据:
wv.loadData(myString, "text/html, "utf-8");
我遇到的问题是WebView破坏了非ASCII(我假设?)字符的输出。如果我使用TextView而不是WebView,则不会出现此问题,并且文本显示正确(尽管涉及一些HTML标记,因此最终不需要TextView。)
如果有帮助,当我运行以下代码时:
for(int i = 0; i < myString.length() && i < 400; i++)
Log.i("Text", myString.charAt(i) + ": " + (int) myString.charAt(i));
在日志中出现违规字符:
05-27 13:15:45.110:INFO / Text(606):â:8217
我认为这是一个字符集问题,但我不太清楚如何解决它。
以下是HTML的一小部分(我不确定我的雇主是否允许完整发布内容):
突尼斯总理
这是导致问题的'角色。注意:我正在显示的不是一个完整格式的HTML页面..只是带有HTML标记的文本,如果重要的话......
答案 0 :(得分:6)
我有一个类似的问题,我传递给loadData()方法的字符串没有在WebView中正确显示(有奇数字符而不是正确的DBCS字符)。在我的例子中,字符串在UTF-8中正确编码,问题在于loadData()如何使用字符串。
我发现在mime类型参数中指定字符集很重要,而不是编码参数。特别是呼叫必须是
wv.loadData(myString, "text/html; charset=utf-8", encoding);
在我的情况下,我传递null作为编码变量并且它起作用(Android 4.2.1)。阅读loadData()上的API文档;它似乎表明它将接受“base64”,所有其他值将导致data参数被视为URL编码的ASCII。
因此,您无法使用encoding参数设置字符串的编码,您必须在mime类型中指定编码。
答案 1 :(得分:1)
尝试:
wv.loadData(URLEncoder.encode(myString).replace("+", "%20"), "text/html, "utf-8");
或者,如果这不起作用:
wv.loadData(myString, "text/html, "ISO-8859-1");
或两者的结合。其中一个通常适合我。