我在Android应用中使用了一些Webview,但是无法使它们以utf-8编码显示。
如果使用这个,我不会看到我的斯堪的纳维亚字符:
mWebView.loadUrl("file:///android_asset/om.html")
如果尝试这个,我什么都不会显示
mWebView.loadDataWithBaseURL("file:///android_asset/om.html", null, "text/html", "utf-8",null);
问候
我在Android应用中使用了一些Webview,但是无法使它们以utf-8编码显示。
如果使用这个,我不会看到我的斯堪的纳维亚字符:
mWebView.loadUrl("file:///android_asset/om.html")
如果尝试这个,我什么都不会显示
mWebView.loadDataWithBaseURL("file:///android_asset/om.html", null, "text/html", "utf-8",null);
问候
Answers:
您可以在加载数据之前尝试编辑Web视图的设置:
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");
这似乎已经永远以某种形式或方式被打破。 发行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);
现在真正令人讨厌的部分是,在Samsung 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
工作了。
上面的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
在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
然后使用将其加载到WebView中mWebView.loadUrl("file:///android_asset/om.html");
。它应该显示您期望的非拉丁字符。
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类型的字符集:/ weird。这为我解决了数月的困扰。
meta
标签<meta http-equiv="content-type" content="text/html; charset=UTF-8">
仅在我使用时提供帮助,loadUrl
但在使用时被忽略loadData
(在API 16 + 21上测试)。
您需要交换前两个参数。看到这个线程:Android WebView UTF-8不显示
因此,您的代码应如下所示:
mWebView.loadDataWithBaseURL(null, "file:///android_asset/om.html", "text/html", "utf-8",null);
我不确定在加载该页面之前您正在做什么。此安全更改可能与此有关吗?您之前是从网络加载页面吗?
1.0版的注意事项。由于WebKit的更改,子资源通过“ file:/// android_asset /”对资产文件的访问受到更多限制。如果您提供null或空字符串作为baseUrl,则将无法访问资产文件。如果baseUrl不是http / sftp / about / javascript作为方案,则可以访问资产文件以获取子资源。
取自此处:http : //developer.android.com/reference/android/webkit/WebView.html 在方法“ loadDataWithBaseURL”的部分中。
您可以使用“ loadData”代替它进行快速测试吗?指定“ utf-8”进行编码并将斯堪的纳维亚字符粘贴到数据参数中。简单测试即可消除安全问题。