Android系统。 WebView和loadData

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

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

有没有一个编码列表?

我从我的大学知道,在我的情况下,HTML来自DB,并用拉丁-1编码。 我尝试将编码参数设置为latin-1,即ISO-8859-1 / iso-8859-1,但仍然存在显示ä,ö,ü等特殊符号的问题。

我会非常感谢任何build议。

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

这完美地工作,特别是在Android 4.0,这显然忽略了HTML 内的字符编码。

testing2.3和4.0.3。

事实上,我不知道最后一个参数除了“base64”以外还有什么值。 一些谷歌的例子把null放在那里。

WebView.loadData()根本无法正常工作。 我所要做的是:

 String header = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"; myWebView.loadData(header+myHtmlString, "text/html", "UTF-8"); 

我认为在你的情况下,你应该在头文件和WebView.loadData()中用latin1或ISO-8859-1replaceUTF-8。

而且,为了给出一个完整的答案,这里是正式的编码列表: http : //www.iana.org/assignments/character-sets

我更新我的答案是更包容:

要使用非latin1编码的WebView.loadData() ,您必须对html内容进行编码。 以前的例子在Android 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()和代码变得非常干净,不依赖于Android版本:

 WebSettings settings = myWebView.getSettings(); settings.setDefaultTextEncodingName("utf-8"); myWebView.loadDataWithBaseURL(null, htmlString, "text/html", "utf-8", null); 

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

据我所知, loadData()只是简单的生成一个data: URL来提供数据。

阅读javadocs的loadData()

如果编码参数的值是“base64”,那么数据必须编码为base64。 否则,数据必须对安全URL字符范围内的八位字节使用ASCII编码,并对该范围外的八位字节使用标准的%xxhexURL编码。 例如, '#', '%', '\', '?' 应分别由%23,%25,%27,%3f取代。

由此方法形成的“数据”schemeURL使用默认的US-ASCII字符集。 如果您需要设置不同的字符集,您应该形成一个“数据”模式的URL,在URL的mediatype部分显式指定字符集参数,并调用loadUrl(String)。 请注意,从数据URL的媒体types部分获取的字符集总是会覆盖HTML或XML文档本身中指定的字符集。

因此,您应该使用US-ASCII并自己转义任何特殊字符,或者使用Base64编码所有内容。 假设你使用UTF-8(我没有用latin1testing过),下面的代码应该可以工作:

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

我有这个问题,但是:

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

不适用于所有设备。 我合并了一些方法:

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

其作品! :) 谢谢

使用这个:String customHtml = text;

  wb.loadDataWithBaseURL(null,customHtml,"text/html", "UTF-8", null); 
  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); 

上面的答案在我的情况下不起作用。 你需要在meta标签中指定utf-8

 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> <!-- you content goes here --> </body> </html> 

webview.loadDataWithBaseURL(null,text,“text / html”,“UTF-8”,null);