WebView中的字符集(Android)

Ada*_*dam 1 android character-encoding android-webview

我试图使用loadData()方法在WebView中显示Java String中的一些数据:

wv.loadData(myString, "text/html, "utf-8");
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是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));
Run Code Online (Sandbox Code Playgroud)

一个有问题的字符在日志中显示如下:

05-27 13:15:45.110:INFO/Text(606):â:8217

我认为这是一个字符集问题,但我不太清楚如何解决它.

这是HTML的一小部分(我不确定我的雇主是否允许完整发布内容):

突尼斯总理

这是'造成问题的角色'.注意:我正在显示的不是一个完整形成的HTML页面..只是带有HTML标记的文本,如果这很重要..

小智 6

我有一个类似的问题,我传递给loadData()方法的字符串没有在WebView中正确呈现(有奇数字符而不是正确的DBCS字符).在我的例子中,字符串在UTF-8中正确编码,问题在于loadData()如何使用字符串.

我发现在mime类型参数中指定字符集很重要,而不是编码参数.特别是电话必须是

wv.loadData(myString, "text/html; charset=utf-8", encoding);
Run Code Online (Sandbox Code Playgroud)

在我的例子中,我传递null作为编码变量,它工作(Android 4.2.1).阅读loadData()上的API文档; 它似乎表明它将接受"base64",所有其他值将导致data参数被视为URL编码的ASCII.

因此,您无法使用encoding参数设置字符串的编码,您必须在mime类型中指定编码.