我正在使用
在WebView中加载一些包含latin-1字符的数据String uri = Uri.encode(html);
webview.loadData(uri, "text/html", "ISO-8859-1");
显示时,latin1字符将被奇怪的字符替换。
如果我直接在TextView中加载html(只是为了测试),就会正确显示拉丁字符。
有人可以帮忙吗?
由于
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>
答案 0 :(得分:52)
myWebView.loadData(myHtmlString, "text/html; charset=UTF-8", null);
这完美无瑕,特别是在Android 4.0上,显然忽略了内部 HTML中的字符编码。
在2.3和4.0.3上测试。
实际上,我不知道除了“base64”之外的其他值是什么。一些Google示例在那里放置了null。
您应始终使用UTF-8编码。多年来,其他所有字符编码都已经过时了。
答案 1 :(得分:34)
只有这样才能让它正常工作,如评论here:
webview.loadDataWithBaseURL("fake://not/needed", html, "text/html", "utf-8", "");
没有URI编码,utf-8 ... loadData错误?
答案 2 :(得分:14)
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);
解决问题的方法之一。
答案 3 :(得分:7)
我显示©2011,它正在显示©。
使用以下代码,我已达到显示正确值©2011
webViewContent.loadDataWithBaseURL(null, html, "text/html", "utf-8", null);
答案 4 :(得分:1)
webView.loadDataWithBaseURL(null, html, "text/html", "utf-8", null);
答案 5 :(得分:0)
AFAIK:
首先,loadData()方法用于加载原始html代码。
其次,只需将html代码直接放到loadData()中,不要编码为
您可能想尝试这样:
webview.loadData(uri, "text/html", "ISO-8859-1");
干杯!
答案 6 :(得分:0)
我也遇到过这样一个奇怪的角色问题。尝试了不同的选项,但有效的选项如下。
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。
答案 7 :(得分:0)
来自Java文档的有关loadData方法的信息
使用“数据”方案URL将给定数据加载到此WebView中。
请注意,JavaScript的相同源策略意味着运行的脚本 使用此方法加载的页面将无法访问内容 使用“数据”以外的任何方案加载,包括“http(s)”。至 避免这种限制,使用loadDataWithBaseURL()与适当的 基本URL。
encoding参数指定数据是base64还是URL 编码。如果数据是base64编码的,则为编码值 参数必须是'base64'。对于参数的所有其他值, 包括null,假设数据使用ASCII编码 八位字节在安全URL字符范围内并使用标准 %xx对该范围之外的八位字节的URL的十六进制编码。例如, '#','%','\','?'应该被%23,%25,%27,%3f取代 分别。
此方法形成的“数据”方案URL使用默认的US-ASCII 字符集。如果您需要设置不同的字符集,您应该形成 一个'数据'方案URL,它明确指定了一个charset参数 URL的mediatype部分,而是调用loadUrl(String)。 请注意,字符集是从数据的mediatype部分获得的 URL始终覆盖HTML或XML文档中指定的URL 本身。
以下代码为我工作。
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");