WebView.loadData() 根本无法正常工作。我必须做的是:
String header = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";
myWebView.loadData(header+myHtmlString, "text/html", "UTF-8");
我认为在您的情况下,您应该在标头和 WebView.loadData() 中将 UTF-8 替换为 latin1 或 ISO-8859-1。
并且,为了给出完整的答案,这里是官方的编码列表:http://www.iana.org/assignments/character-sets
我更新了我的答案以更具包容性:
要将WebView.loadData() 与非 latin1 编码一起使用,您必须对 html 内容进行编码。上一个示例在 Android 4+ 中无法正常工作,因此我将其修改为如下所示:
WebSettings settings = myWebView.getSettings();
settings.setDefaultTextEncodingName("utf-8");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO) {
String base64 = Base64.encodeToString(htmlString.getBytes(), Base64.DEFAULT);
myWebView.loadData(base64, "text/html; charset=utf-8", "base64");
} else {
String header = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";
myWebView.loadData(header + htmlString, "text/html; charset=UTF-8", null);
}
但后来我切换到WebView.loadDataWithBaseURL(),代码变得非常干净,不依赖于Android版本:
WebSettings settings = myWebView.getSettings();
settings.setDefaultTextEncodingName("utf-8");
myWebView.loadDataWithBaseURL(null, htmlString, "text/html", "utf-8", null);
由于某些原因,这些函数的实现完全不同。