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件事情总是显示正确的内容:
- 使用loadDataWithBaseUrl而不是loadData函数。
- 在HTML文件中将正确的编码设置为元标记
- 在WebSettings中设置defaultTextEncodingName
这些例子已经通过其他答案提供,所以我不重复!
mwebView.loadData(URLEncoder.encode(data, "utf-8").replaceAll("\\+"," "), "text/html", "utf-8");