首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓。WebView和loadData

安卓。WebView和loadData
EN

Stack Overflow用户
提问于 2010-10-19 01:19:53
回答 8查看 146.4K关注 0票数 109

可以使用以下方法来设置web视图编码的内容( String data,String mimeType,String loadData)

如何处理html数据编码未知的问题?!

有编码列表吗?!

我从我的大学知道,在我的例子中,html来自DB,并且是用拉丁文-1编码的。我尝试将编码参数设置为拉丁语-1、ISO-8859-1 / iso-8859-1,但仍然无法显示ä、ö、ü等特殊符号。

我将非常感谢您的任何建议。

EN

回答 8

Stack Overflow用户

发布于 2012-02-16 21:22:55

代码语言:javascript
复制
myWebView.loadData(myHtmlString, "text/html; charset=UTF-8", null);

这是完美的,特别是在Android4.0上,它显然忽略了超文本标记语言中的字符编码

在2.3和4.0.3上进行了测试。

事实上,我不知道最后一个参数除了"base64“还接受什么值。一些Google示例在其中放入了null。

票数 209
EN

Stack Overflow用户

发布于 2010-11-23 03:45:04

WebView.loadData()根本不能正常工作。我要做的是:

代码语言:javascript
复制
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+中不能正常工作,所以我修改了它,如下所示:

代码语言:javascript
复制
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(),代码变得非常干净,不依赖于安卓版本:

代码语言:javascript
复制
WebSettings settings = myWebView.getSettings();
settings.setDefaultTextEncodingName("utf-8");
myWebView.loadDataWithBaseURL(null, htmlString, "text/html", "utf-8", null);

由于某些原因,这些函数具有完全不同的实现。

票数 140
EN

Stack Overflow用户

发布于 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测试过),下面的代码应该可以工作:

代码语言:javascript
复制
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");
票数 40
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3961589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档