Android WebView带有乱码的UTF-8字符。

我在我的android应用程序中使用一些网页浏览,但无法使它们以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"); 

另外,如下面的注释中所提供的,一定要在loadData调用中添加"charset=utf-8"

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

这似乎永远以某种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"); 

您也可以使用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"); 

我在Adroid 2.x上有utf-8,在4.x上出现了乱码,直到我放入

  charset=utf-8 

在wv.loadUrlWhatever()调用。 优秀的关注细节,Derzu

HTTP服务器提供的HTML页面有两种方式可以指定内容编码。 通常,服务器将在HTTP标头中指定内容编码,但是由于该页面是从文件加载的,因此不存在HTTP事务,因此没有标头。 因此,WebView将采用Latin-1的默认编码。

但是,您可以使用<meta>标签指定内容编码。 这样构build你的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中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); 

两者的结合似乎为我工作。 出于某种原因,它在mimetypes的编码和字符集上非常喜欢:/奇怪。 这为我解决了几个月的恶化。

你需要交换你的前两个参数。 看到这个线程: Android WebView UTF-8没有显示

所以你的代码应该是这样的:

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

加载该页面之前,我不确定你在做什么。 这个安全改变可以和它有什么关系吗? 你以前从网页加载页面?

注意后1.0。 由于WebKit的更改,通过“file:/// android_asset /”为子资源访问资产文件受到更多限制。 如果您提供null或空string作为baseUrl,您将无法访问资产文件。 如果baseUrl是http(s)/ ftp(s)/ about / javascript以外的任何scheme,则可以访问子资源的资产文件。

采取从这里: http : //developer.android.com/reference/android/webkit/WebView.html在方法“loadDataWithBaseURL”的部分。

你可以使用“loadData”而不是快速testing? 指定“utf-8”编码并将斯堪的纳维亚字符粘贴到数据参数中。 简单的testing来消除安全问题。

你应该记住3件事情总是显示正确的内容:

  1. 使用loadDataWithBaseUrl而不是loadData函数。
  2. 在HTML文件中将正确的编码设置为元标记
  3. 在WebSettings中设置defaultTextEncodingName

这些例子已经通过其他答案提供,所以我不重复!

 mwebView.loadData(URLEncoder.encode(data, "utf-8").replaceAll("\\+"," "), "text/html", "utf-8");