WebView中的字符集(Android)

时间:2011-05-27 13:19:33

标签: android character-encoding android-webview

我试图使用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标记的文本,如果重要的话......

2 个答案:

答案 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");

或两者的结合。其中一个通常适合我。