使用WebView的loadData编码问题

我正在使用一个WebView加载一些包含latin-1字符的数据

String uri = Uri.encode(html); webview.loadData(uri, "text/html", "ISO-8859-1"); 

显示时,latin1字符被奇怪的字符replace。

如果我直接在TextView中加载html(仅用于testing),则可以正确显示拉丁字符。

任何人都可以帮忙?

谢谢

HTML:

 <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <!-- some html --> </html> 

Solutions Collecting From Web of "使用WebView的loadData编码问题"

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

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

testing2.3和4.0.3。

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

你应该总是使用UTF-8编码。 其他字符编码已经过时多年了。

只有这样才能使其工作,正如在这里所评论的:

 webview.loadDataWithBaseURL("fake://not/needed", html, "text/html", "utf-8", ""); 

没有URI编码,utf-8 … loadData错误?

 String start = "<html><head><meta http-equiv='Content-Type' content='text/html' charset='UTF-8' /></head><body>"; String end = "</body></html>"; webcontent.loadData(start+ YOURCONTENT + end, "text/html; charset=UTF-8", null); 

问题的解决之一。

我有显示©2011年,它正在显示©。

用下面的代码,我已经实现了显示正确的值©2011

 webViewContent.loadDataWithBaseURL(null, html, "text/html", "utf-8", null); 

AFAIK认为:首先,使用loadData()方法加载原始html代码。
其次,只需将html代码直接放到loadData(),不要对其进行编码

你可能想尝试这样的:

 webview.loadData(uri, "text/html", "ISO-8859-1"); 

干杯!

我也有在这里和那里得到一个奇怪的字符的问题。 试过不同的select,但是工作的那个在下面。

 String style_sheet_url = "http://something.com/assets/css/layout.css"; String head = "<head> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />" + "<link rel=\"stylesheet\" type=\"text/css\" href=\"" + style_sheet_url + "\" /></head>"; String locdata = "<html xmlns=\"http://www.w3.org/1999/xhtml\">" + head + "<body>"+ data + "</body></html>"; wv_news_text.loadData(locdata, "text/html", "utf-8"); 

wv_news_text是WebView。

来自Java的关于loadData方法的文档

使用“数据”schemeURL将给定数据加载到此WebView中。

请注意,JavaScript的同源策略意味着使用此方法加载的页面中运行的脚本将无法访问使用'data'之外的任何scheme加载的内容,包括'http(s)'。 为避免这种限制,请使用loadDataWithBaseURL()和适当的基本URL。

编码参数指定数据是base64还是URL编码。 如果数据是base64编码的,则编码参数的值必须是“base64”。 对于参数的所有其他值(包括空值),假定数据对安全URL字符范围内的八位字节使用ASCII编码,并对该范围外的八位字节使用标准的%xxhexURL编码。 例如, '#', '%', '\', '?' 应分别由%23,%25,%27,%3f取代。

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

以下代码为我工作。

 String base64EncodedString = null; try { base64EncodedString = android.util.Base64.encodeToString((preString+mailContent.getBody()+postString).getBytes("UTF-8"), android.util.Base64.DEFAULT); } catch (UnsupportedEncodingException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } if(base64EncodedString != null) { wvMailContent.loadData(base64EncodedString, "text/html; charset=utf-8", "base64"); } else { wvMailContent.loadData(preString+mailContent.getBody()+postString, "text/html; charset=utf-8", "utf-8"); 
 webView.loadDataWithBaseURL(null, html, "text/html", "utf-8", null);