Android WebView UTF-8未显示

我有一个webview,并试图加载简单的UTF-8文本。

mWebView.loadData("將賦予他們的傳教工作標示為", "text/html", "UTF-8"); 

但WebView显示ANSI / ASCII垃圾。

显然是一个编码问题,但是我在告诉webview显示Unicode文本时丢失了什么?

这是一个HelloWorld应用程序。

使用:

 mWebView.loadDataWithBaseURL(null, "將賦予他們的傳教工作標示為", "text/html", "utf-8", null); 

或通过setDefaultTextEncoding使用WebSettings:

 WebSettings settings = mWebView.getSettings(); settings.setDefaultTextEncodingName("utf-8"); 

对于Android的最新版本,API 16到22,它已经过testing,并且使用loadData()方法正常工作,要求mimeType包含:“charset = utf-8”。

 WebView mWebView = (WebView) findViewById(R.id.myWebView); WebSettings settings = mWebView.getSettings(); settings.setDefaultTextEncodingName("utf-8"); mWebView.loadData(myCharacters, "text/html; charset=utf-8",null); 

要么

  mWebView.loadData(myCharacters, "text/html; charset=utf-8","UTF-8"); 

这个问题可以追溯到至less姜饼

这似乎永远以某种forms或方式被打破。 问题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)上testing多字节字符时出现乱码,除非使用loadDataWithBaseURL )。 WebView文档

Android的最新版本

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

 webView.loadData(scandinavianCharacters, "text/html; charset=utf-8", "UTF-8"); 

讨论

当我第一次看到这个时,老板给我介绍了他的手机,一个早期的Nexus,当时我正在开发三星Galaxy II,它在我们的经济新闻中出现,他的手机里有很多非ASCII字符。 所以,这不仅是Android的一个长期存在的问题,而且在设备制造商之间也不一致。 这是一个你必须防守编程的问题。