可以使用以下方法来设置web视图编码的内容( String data,String mimeType,String loadData)
如何处理html数据编码未知的问题?!
有编码列表吗?!
我从我的大学知道,在我的例子中,html来自DB,并且是用拉丁文-1编码的。我尝试将编码参数设置为拉丁语-1、ISO-8859-1 / iso-8859-1,但仍然无法显示ä、ö、ü等特殊符号。
我将非常感谢您的任何建议。
发布于 2012-02-16 21:22:55
myWebView.loadData(myHtmlString, "text/html; charset=UTF-8", null);这是完美的,特别是在Android4.0上,它显然忽略了超文本标记语言中的字符编码。
在2.3和4.0.3上进行了测试。
事实上,我不知道最后一个参数除了"base64“还接受什么值。一些Google示例在其中放入了null。
发布于 2010-11-23 03:45:04
WebView.loadData()根本不能正常工作。我要做的是:
String header = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";
myWebView.loadData(header+myHtmlString, "text/html", "UTF-8");我认为在您的情况下,应该在header和WebView.loadData()中用latin1或ISO-8859-1替换UTF-8。
为了给出完整的答案,下面是官方的编码列表:http://www.iana.org/assignments/character-sets
我更新了我的答案,使其更具包容性:
要将WebView.loadData()与非latin1编码一起使用,必须对html内容进行编码。前面的示例在安卓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(),代码变得非常干净,不依赖于安卓版本:
WebSettings settings = myWebView.getSettings();
settings.setDefaultTextEncodingName("utf-8");
myWebView.loadDataWithBaseURL(null, htmlString, "text/html", "utf-8", null);由于某些原因,这些函数具有完全不同的实现。
发布于 2012-03-29 15:59:10
据我所知,loadData()只是用提供的数据生成一个data: URL。
阅读loadData()的javadocs
如果编码参数的值为' base64 ',则必须将数据编码为base64。否则,数据必须对安全URL字符范围内的二进制八位数使用ASCII编码,对该范围外的二进制八位数使用标准的%xx十六进制URL编码。例如,'#','%','\','?‘应分别替换为%23、%25、%27、%3f。
此方法形成的“data”方案URL使用默认的US-ASCII字符集。如果你需要设置一个不同的字符集,你应该形成一个'data‘方案URL,它在URL的mediatype部分显式地指定一个字符集参数,并调用loadUrl(字符串)。请注意,从数据URL的mediatype部分获得的字符集总是覆盖HTML或XML文档本身中指定的字符集。
因此,您应该使用US-ASCII并自己转义任何特殊字符,或者使用Base64对所有内容进行编码。假设你使用UTF-8 (我还没有用latin1测试过),下面的代码应该可以工作:
String data = ...; // the html data
String base64 = android.util.Base64.encodeToString(data.getBytes("UTF-8"), android.util.Base64.DEFAULT);
webView.loadData(base64, "text/html; charset=utf-8", "base64");https://stackoverflow.com/questions/3961589
复制相似问题