为了账号安全,请及时绑定邮箱和手机立即绑定

安卓 WebView和loadData

安卓 WebView和loadData

慕婉清6462132 2019-10-15 14:25:09
可以使用以下方法对Web视图中的内容进行设置loadData(String data,String mimeType,String encoding)如何处理未知的html数据编码问题?有编码列表吗?我从我的大学知道,就我而言,html来自DB,并使用latin-1编码。我尝试将编码参数设置为latin-1,设置为ISO-8859-1 / iso-8859-1,但仍然无法显示ä,ö,ü等特殊符号。我将非常感谢您的任何建议。
查看完整描述

3 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

myWebView.loadData(myHtmlString, "text/html; charset=UTF-8", null);

这完美的作品,尤其是在Android 4.0,这显然忽略了字符编码中的HTML。


经过2.3和4.0.3测试。


实际上,我不知道最后一个参数除了“ base64”以外还需要其他什么值。Google的一些示例在其中放置了null。


查看完整回答
反对 回复 2019-10-15
?
慕后森

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


查看完整回答
反对 回复 2019-10-15
  • 3 回答
  • 0 关注
  • 646 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信