3 回答
TA贡献1818条经验 获得超7个赞
myWebView.loadData(myHtmlString, "text/html; charset=UTF-8", null);
这完美的作品,尤其是在Android 4.0,这显然忽略了字符编码中的HTML。
经过2.3和4.0.3测试。
实际上,我不知道最后一个参数除了“ base64”以外还需要其他什么值。Google的一些示例在其中放置了null。
TA贡献1802条经验 获得超5个赞
据我了解,loadData()只需生成一个data:URL并提供数据即可。
阅读的javadoc为loadData():
如果encoding参数的值为'base64',则数据必须编码为base64。否则,数据必须对安全URL字符范围内的八位字节使用ASCII编码,并对超出范围的八位字节使用标准的URL%xx十六进制编码。例如, '#', '%', '\', '?' 应分别替换为%23,%25,%27和%3f。
通过此方法形成的“数据”方案URL使用默认的US-ASCII字符集。如果需要设置其他字符集,则应形成一个“数据”方案URL,该URL在mediatype部分中显式指定一个charset参数,然后调用loadUrl(String)。请注意,从数据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");
- 3 回答
- 0 关注
- 709 浏览
添加回答
举报