Android WebView乱码为UTF-8字符。

时间:2011-02-08 12:36:21

标签: android webview utf

我在我的Android应用中使用了一些网页浏览,但无法以utf-8编码显示它们。

如果使用这个,我将看不到我的斯堪的纳维亚字符:

mWebView.loadUrl("file:///android_asset/om.html")

如果尝试这个,我将不会显示任何内容

mWebView.loadDataWithBaseURL("file:///android_asset/om.html", null, "text/html", "utf-8",null);

此致

9 个答案:

答案 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

Android的最新版本

有些人报告要求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
在wv.loadUrlWhatever()调用中。 Derzu非常注重细节

答案 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件事情,以便始终显示正确的内容:

  1. 使用loadDataWithBaseUrl而不是loadData函数。
  2. 将html文件中的正确编码设置为元标记
  3. 在WebSettings中设置defaultTextEncodingName
  4. 这些例子是通过其他答案提供的,所以我不再重复!

答案 8 :(得分:0)

$(window).scrollTop()+scrollEl > containerBottom