我在我的安卓应用中使用了一些WebView,但是无法使它们以utf-8编码显示。
如果使用这个,我将看不到我的斯堪的纳维亚字符:
mWebView.loadUrl("file:///android_asset/om.html")
如果我尝试这个,就什么都不会显示
mWebView.loadDataWithBaseURL("file:///android_asset/om.html", null, "text/html", "utf-8",null);
敬礼
我在我的安卓应用中使用了一些WebView,但是无法使它们以utf-8编码显示。
如果使用这个,我将看不到我的斯堪的纳维亚字符:
mWebView.loadUrl("file:///android_asset/om.html")
如果我尝试这个,就什么都不会显示
mWebView.loadDataWithBaseURL("file:///android_asset/om.html", null, "text/html", "utf-8",null);
敬礼
WebSettings settings = mWebView.getSettings();
settings.setDefaultTextEncodingName("utf-8");
另外,如下方评论所提供的,确保在loadData调用中添加"charset=utf-8"
:
mWebView.loadData(getString(R.string.info_texto), "text/html; charset=utf-8", "utf-8");
loadDataWithBaseURL()
方法(https://dev59.com/-G445IYBdhLWcg3wTIfm#10831462)。 - sulai似乎一直存在某种形式的问题。
问题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文档
一些用户报告称loadData调用的行为发生了变化,需要将mimeType
包括charset=utf-8
。
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仍然没有解决这个基本问题。
text/html; charset=utf-8
有效。 - Azad德尔祖的建议非常有帮助:
webview.loadData(getString(R.string.info_texto), "text/html; charset=utf-8", "utf-8");
我在Android 2.x上使用了UTF-8,而在4.x上出现了乱码的ANSI,直到我安装了
charset=utf-8
在wv.loadUrlWhatever()
的调用中。Derzu非常注重细节。
通过 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 中。它应该会像您期望的那样显示非拉丁字符。
WebView wv = (WebView) findViewById(R.id.rowWebview);
WebSettings settings = wv.getSettings();
settings.setDefaultTextEncodingName("utf-8");
wv.loadData(topHtml, "text/html; charset=utf-8",null);
这两者的组合对我来说似乎很有效。由于某种原因,它喜欢在mime类型中使用null作为编码和字符集:/ 很奇怪。这解决了数月的烦恼。
loadUrl
时有所帮助,但在使用loadData
时被忽略(在API 16 + 21上进行测试)。 - DirkmWebView.loadDataWithBaseURL(null, "file:///android_asset/om.html", "text/html", "utf-8",null);
为了始终显示正确的内容,应牢记以下3点:
示例已经通过其他答案提供,我就不再重复了!
mwebView.loadData(URLEncoder.encode(data, "utf-8").replaceAll("\\+"," "), "text/html", "utf-8");
我不确定在加载该页面之前你在做什么。这个安全性改变是否与此有关?你是从网页加载页面吗?
针对1.0版本的注意事项。由于WebKit的更改,通过“file:///android_asset/”访问子资源的资产文件的访问权限更受限制。如果您提供null或空字符串作为baseUrl,则无法访问资产文件。如果baseUrl不是http(s)/ ftp(s)/ about / javascript作为方案的任何其他内容,则可以访问子资源的资产文件。
引用自此处:http://developer.android.com/reference/android/webkit/WebView.html 在“loadDataWithBaseURL”方法的部分中。
你能否使用“loadData”进行快速测试?指定“utf-8”编码并将斯堪的纳维亚字符粘贴到数据参数中。这是一个简单的测试,可消除安全问题。