Android WebView乱码为UTF-8字符.

elw*_*wis 73 android utf webview

我在我的Android应用程序中使用了一些webview,但无法使它们以utf-8编码显示.

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

mWebView.loadUrl("file:///android_asset/om.html")
Run Code Online (Sandbox Code Playgroud)

如果尝试这个,我根本不会显示任何东西

mWebView.loadDataWithBaseURL("file:///android_asset/om.html", null, "text/html", "utf-8",null);
Run Code Online (Sandbox Code Playgroud)

问候

Eri*_*vik 150

您可以在加载数据之前尝试编辑webview的设置:

WebSettings settings = mWebView.getSettings();
settings.setDefaultTextEncodingName("utf-8");
Run Code Online (Sandbox Code Playgroud)

另外,如下面的评论中所提供的,请务必添加"charset=utf-8"到loadData调用:

mWebView.loadData(getString(R.string.info_texto), "text/html; charset=utf-8", "utf-8");
Run Code Online (Sandbox Code Playgroud)

  • 这适用于android 2.2.1,4.0.4,4.1.2.您还需要在loadData调用中添加"charset = utf-8".像那样:webview.loadData(getString(R.string.info_texto),"text/html; charset = utf-8","utf-8"); (42认同)
  • 这适用于Android 2.2,但是为了让它也适用于Android 4.04,你需要使用`loadDataWithBaseURL()`方法[由Cameron建议](http://stackoverflow.com/a/10831462/1208581). (2认同)

Cam*_*mer 126

这似乎永远以某种形式或方式被打破. 问题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);
Run Code Online (Sandbox Code Playgroud)

现在真正烦人的部分是在三星Galaxy S II(4.0.3)上loadData()工作正常,但在Galaxy Nexus(4.0.2)上测试多字节字符是乱码,除非你使用loadDataWithBaseURL( ).WebView文档

Android的最新版本

有些人报告需要mimeType包含的loadData调用的行为发生了变化charset=utf-8.

webView.loadData(scandinavianCharacters, "text/html; charset=utf-8", "UTF-8");
Run Code Online (Sandbox Code Playgroud)

您也可以使用此配方 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);
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,Android仍然没有解决这个基本问题.

  • 我使用android 4.4.4并没有为我工作.`text/html的; charset = utf-8`工作. (2认同)

R E*_*ris 27

Derzu的位在上面非常有帮助:

webview.loadData(getString(R.string.info_texto), "text/html; charset=utf-8", "utf-8"); 
Run Code Online (Sandbox Code Playgroud)

我在Adroid 2.x上使用utf-8并在4.x上乱码ansi,直到我放入

 charset=utf-8
Run Code Online (Sandbox Code Playgroud)

在wv.loadUrlWhatever()调用中.Derzu非常注重细节


Aar*_*n D 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
Run Code Online (Sandbox Code Playgroud)

然后使用将其加载到WebView中mWebView.loadUrl("file:///android_asset/om.html");.它应该显示您期望的非拉丁字符.

  • 这个解决方案是我需要的,因为我通过文件加载html内容.感谢:D (2认同)

小智 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);
Run Code Online (Sandbox Code Playgroud)

这两者的组合似乎对我有用.出于某种原因,它喜欢编码上的null和mime类型中的charset:/很奇怪.这已经解决了我几个月的恶化.