Android 安卓WebView和loadData
可以使用以下方法设置web视图的内容 loadData(字符串数据、字符串mimeType、字符串编码) 如何处理html数据未知编码的问题 有编码列表吗 我从大学里知道,在我的例子中,html来自DB,用拉丁语1编码。 我尝试将编码参数设置为latin-1,设置为ISO-8859-1/ISO-8859-1,但仍然无法显示像ä,ö,ü这样的特殊符号 我将非常感谢您的建议。WebView.loadData()完全不能正常工作。我要做的是:Android 安卓WebView和loadData,android,encoding,webview,Android,Encoding,Webview,可以使用以下方法设置web视图的内容 loadData(字符串数据、字符串mimeType、字符串编码) 如何处理html数据未知编码的问题 有编码列表吗 我从大学里知道,在我的例子中,html来自DB,用拉丁语1编码。 我尝试将编码参数设置为latin-1,设置为ISO-8859-1/ISO-8859-1,但仍然无法显示像ä,ö,ü这样的特殊符号 我将非常感谢您的建议。WebView.loadData()完全不能正常工作。我要做的是: String header = "<?xml ver
String header = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";
myWebView.loadData(header+myHtmlString, "text/html", "UTF-8");
由于某些原因,这些函数具有完全不同的实现
myWebView.loadData(myHtmlString, "text/html; charset=UTF-8", null);
这是完美的,尤其是在Android 4.0上,它显然忽略了HTML内部的字符编码
在2.3和4.0.3中测试
事实上,我不知道最后一个参数除了“base64”之外还有什么其他值。一些谷歌的例子在这里输入空值。以上的答案在我的例子中不起作用。您需要在meta标记中指定utf-8
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<!-- you content goes here -->
</body>
</html>
据我所知,
loadData()
只需生成一个数据:
URL,并提供数据
读取loadData()
:
如果编码参数的值为“base64”,则必须将数据编码为base64。否则,对于安全URL字符范围内的八位字节,数据必须使用ASCII编码,对于该范围外的八位字节,数据必须使用URL的标准%xx十六进制编码。例如,“#”、“%”、“\”、“?”应分别替换为%23、%25、%27、%3f
此方法形成的“数据”方案URL使用默认的US-ASCII字符集。如果需要设置不同的字符集,则应形成一个“数据”方案URL,该URL在URL的mediatype部分显式指定一个字符集参数,并调用loadUrl(String)。请注意,从数据URL的mediatype部分获得的字符集始终覆盖HTML或XML文档本身中指定的字符集
因此,您应该自己使用US-ASCII并转义任何特殊字符,或者使用Base64对所有内容进行编码。假设您使用UTF-8(我还没有用latin1测试过这一点),以下内容应该可以工作:
我有这个问题,但是:
String content = "<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" /></head><body>";
content += mydata + "</body></html>";
WebView1.loadData(content, "text/html", "UTF-8");
字符串内容=”;
content+=mydata+“”;
WebView1.loadData(内容,“文本/html”、“UTF-8”);
并非在所有设备中都能工作。我合并了一些方法:
String content =
"<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"+
"<html><head>"+
"<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />"+
"</head><body>";
content += myContent + "</body></html>";
WebView WebView1 = (WebView) findViewById(R.id.webView1);
WebView1.loadData(content, "text/html; charset=utf-8", "UTF-8");
字符串内容=
""+
""+
""+
"";
内容+=myContent+“”;
WebView WebView1=(WebView)findViewById(R.id.WebView1);
WebView1.loadData(内容,“text/html;charset=utf-8”、“utf-8”);
它可以工作。使用以下方法:
String strWebData="html...." //**Your html string**
WebView webDetail=(WebView) findViewById(R.id.webView1);
WebSettings websetting = webDetail.getSettings();
websetting.setDefaultTextEncodingName("utf-8");
webDetail.loadData(strWebData, "text/html; charset=utf-8", null);
字符串customHtml=文本
wb.loadDataWithBaseURL(null,customHtml,"text/html", "UTF-8", null);
loadDataWithBaseURL(null,text,“text/html”,“UTF-8”,null) 在Web视图中加载htmlContent最安全的方法是:
我们的团队建议您使用Base64对数据进行编码。我们提供了如何进行编码的示例:
- API文档:
- 视频谈话:(跳到时间戳9:58)
webView.loadData(
Base64.encodeToString(
htmlContent.getBytes(StandardCharsets.UTF_8),
Base64.DEFAULT), // encode in Base64 encoded
"text/html; charset=utf-8", // utf-8 html content (personal recommendation)
"base64"); // always use Base64 encoded data: NEVER PUT "utf-8" here (using base64 or not): This is wrong!
女贞,安德烈。我试过你的解决办法。不幸的是,它对我不起作用:(您是否如我所述尝试过UTF-8?现在,当我思考您的问题时,我突然想到,在Java中,所有字符串都是UTF-8,因此我的示例应该可以完整地工作。所有字符串都是UTF-8,但来自服务器的文本都是拉丁语-1。我想,我尝试过UTF-8、拉丁语-1和ISO-8859-1,但仍然看到奇怪的符号,而不是ü,ö,ä)。但我有另一个想法,我将尝试使用正确的编码将服务器上的字节流转换为字符串。也许,这将有助于我将4.0+编码也设置为mime类型“text/html;chartset=utf-8”,否则将无法识别最后一个代码段(带有loadDataWithBaseURL的代码段)在4.2.2和2.3.6设备上都非常有效:数据这无法工作如果你有US-ASCII字符集以外的字符,“完美无瑕”。刚刚在4.2.2设备上试用过,效果像一个符咒,但在2.3.6设备上它只显示相同的垃圾字符。:s这也适用于我在4.1.2(他也忽略HTML中的字符集)中的工作,并使用拉丁1编码!如图所示。@Frank same,在HTC one 2.3.7上测试过(可能都是姜饼)并且得到了同样的垃圾,我必须使用Andrey Novikov解决方案和
WebView。根据谷歌的建议,loadDataWithBaseURL()
base64是必需的。在这里阅读更多内容,并查看谷歌的视频!(我答案中的链接;-)这提醒我在到处闲逛之前要检查文档!谢谢你的回答!在webview中加载了不同的内置上下文html帮助,并且只在一段时间内有效。这已经解决了问题。15稍后发布,这是唯一一个对meThis有效的方法。这不是Google推荐的方法。请查看我的答案并查看视频对话;-)
String strWebData="html...." //**Your html string**
WebView webDetail=(WebView) findViewById(R.id.webView1);
WebSettings websetting = webDetail.getSettings();
websetting.setDefaultTextEncodingName("utf-8");
webDetail.loadData(strWebData, "text/html; charset=utf-8", null);
wb.loadDataWithBaseURL(null,customHtml,"text/html", "UTF-8", null);
webView.loadData(
Base64.encodeToString(
htmlContent.getBytes(StandardCharsets.UTF_8),
Base64.DEFAULT), // encode in Base64 encoded
"text/html; charset=utf-8", // utf-8 html content (personal recommendation)
"base64"); // always use Base64 encoded data: NEVER PUT "utf-8" here (using base64 or not): This is wrong!