我在我的Android应用中使用了一些网页浏览,但无法以utf-8编码显示它们。
如果使用这个,我将看不到我的斯堪的纳维亚字符:
mWebView.loadUrl("file:///android_asset/om.html")
如果尝试这个,我将不会显示任何内容
mWebView.loadDataWithBaseURL("file:///android_asset/om.html", null, "text/html", "utf-8",null);
此致
答案 0 :(得分:148)
您可以在加载数据之前尝试编辑网页视图的设置:
WebSettings settings = mWebView.getSettings();
settings.setDefaultTextEncodingName("utf-8");
另外,如下面的评论所示,请务必将"charset=utf-8"
添加到loadData调用中:
mWebView.loadData(getString(R.string.info_texto), "text/html; charset=utf-8", "utf-8");
答案 1 :(得分:125)
这似乎已经以某种形式或时尚被打破。 Issue 1733
使用loadDataWithBaseURL而不是loadData。
// Pretend this is an html document with those three characters
String scandinavianCharacters = "øæå";
// Won't render correctly
webView.loadData(scandinavianCharacters, "text/html", "UTF-8");
// Will render correctly
webView.loadDataWithBaseURL(null, scandinavianCharacters, "text/html", "UTF-8", null);
现在真正烦人的部分是在三星Galaxy S II(4.0.3)上loadData()工作正常,但在Galaxy Nexus(4.0.2)上测试多字节字符是乱码,除非你使用loadDataWithBaseURL()。 WebView Documentation
有些人报告要求mimeType
包含charset=utf-8
的loadData调用行为发生变化。
webView.loadData(scandinavianCharacters, "text/html; charset=utf-8", "UTF-8");
您也可以将此配方与WebSettings
WebView webView = (WebView) findViewById(R.id.DemoWebView);
WebSettings webSettings = webView.getSettings();
webSettings.setDefaultTextEncodingName("utf-8");
webView.loadData(scandinavianCharacters, "text/html; charset=utf-8", null);
令人惊讶的是,Android仍然没有解决这个基本问题。
答案 2 :(得分:27)
Derzu的位在上面非常有用:
webview.loadData(getString(R.string.info_texto), "text/html; charset=utf-8", "utf-8");
我在Adroid 2.x上使用utf-8并在4.x上乱码ansi直到我输入
charset=utf-8
答案 3 :(得分:12)
HTTP服务器提供的HTML页面有两种方式可以指定内容编码。通常,服务器将在HTTP标头中指定内容编码,但由于此页面是从文件加载的,因此没有HTTP事务,因此没有标头。因此,WebView采用Latin-1的默认编码。
但是,您可以使用<meta>
标记指定内容编码。这样构建你的html文件:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Title</title>
</head>
Your content following
然后使用mWebView.loadUrl("file:///android_asset/om.html");
将其加载到WebView中。它应该显示您期望的非拉丁字符。
答案 4 :(得分:9)
WebView wv = (WebView) findViewById(R.id.rowWebview);
WebSettings settings = wv.getSettings();
settings.setDefaultTextEncodingName("utf-8");
wv.loadData(topHtml, "text/html; charset=utf-8",null);
这两者的组合似乎对我有用。出于某种原因,它喜欢编码上的null和mime类型中的charset:/ 奇怪的。这已经解决了我几个月的恶化。
答案 5 :(得分:2)
您需要交换前两个参数。请参阅此主题:Android WebView UTF-8 not showing
所以你的代码应该是这样的:
mWebView.loadDataWithBaseURL(null, "file:///android_asset/om.html", "text/html", "utf-8",null);
答案 6 :(得分:0)
在加载该页面之前,我不确定您在做什么。这种安全变化可能与它有关吗?你之前是从网上加载页面吗?
1.0的帖子。由于WebKit的更改,通过“file:/// android_asset /”对子资源的资产文件访问受到更多限制。如果您提供null或空字符串作为baseUrl,您将无法访问资产文件。如果baseUrl不是http(s)/ ftp(s)/ about / javascript作为scheme,则可以访问子资源的资产文件。
从这里采取:http://developer.android.com/reference/android/webkit/WebView.html 在方法“loadDataWithBaseURL”的部分。
您可以使用“loadData”进行快速测试吗?为编码指定“utf-8”并将斯堪的纳维亚字符粘贴到数据参数中。简单测试以消除安全问题。
答案 7 :(得分:0)
您应该记住3件事情,以便始终显示正确的内容:
这些例子是通过其他答案提供的,所以我不再重复!
答案 8 :(得分:0)
$(window).scrollTop()+scrollEl > containerBottom