我在我的 android 应用程序中使用了一些 webviews,但无法使它们以 utf-8 编码显示。
如果使用这个,我将看不到我的斯堪的纳维亚字符:
mWebView.loadUrl("file:///android_asset/om.html")
如果试试这个,我什么都不会显示
mWebView.loadDataWithBaseURL("file:///android_asset/om.html", null, "text/html", "utf-8",null);
问候
您可以在加载数据之前尝试编辑 webview 的设置:
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);
现在真正令人讨厌的部分是在三星 Galaxy S II (4.0.3) 上 loadData() 工作得很好,但在 Galaxy Nexus (4.0.2) 上测试多字节字符会出现乱码,除非你使用 loadDataWithBaseURL( )。Web 视图文档
一些报告要求mimeType包含的 loadData 调用的行为发生了变化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 仍然没有解决这个基本问题。
Derzu 的一点在上面非常有帮助:
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 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 类型中的字符集:/ 奇怪。这解决了我几个月的烦恼。
您需要交换前两个参数。看到这个线程:Android WebView UTF-8 not shown
所以你的代码应该是这样的:
mWebView.loadDataWithBaseURL(null, "file:///android_asset/om.html", "text/html", "utf-8",null);
您应该记住 3 件事以始终显示正确的内容:
这些示例已通过其他答案提供,因此我不再重复!
在加载该页面之前,我不确定您在做什么。这种安全变化与它有什么关系吗?你以前从网上加载页面吗?
1.0 后的注意事项。由于WebKit的变化,子资源通过“file:///android_asset/”访问asset文件受到了更多的限制。如果您提供 null 或空字符串作为 baseUrl,您将无法访问资产文件。如果 baseUrl 不是 http(s)/ftp(s)/about/javascript 作为方案,您可以访问资产文件以获取子资源。
取自这里: http: //developer.android.com/reference/android/webkit/WebView.html 在方法“loadDataWithBaseURL”部分。
您可以使用“loadData”代替快速测试吗?指定“utf-8”进行编码并将斯堪的纳维亚字符粘贴到数据参数中。消除安全问题的简单测试。
mwebView.loadData(URLEncoder.encode(data, "utf-8").replaceAll("\\+"," "), "text/html", "utf-8");