最近做WebView加载本地html,发现了网上说的utf-8乱码的问题。解决也很简单,这里有篇很不错的文章写的很详细。偷懒拿来借鉴~!
?
?
其实我发现这不管是在线还是离线显示都可以使用LoadUrl方法!联网时好像是默认utf-8,离线读取本地时需要设置默认编码!如果图片无法离线显示?参考:??http://androidturing.iteye.com/blog/1280946?
?
在网上看了许多关于WebView 的例子。但当自己做起来时,总是有些差别,是另一种体会。这节我就以 模拟器为2.1 为例来讲。
?? WebView 主要调用三个方法:LoadUrl、LoadData、LoadDataWithBaseURL。
???? 1、LoadUrl??????? 直接加载网页、图片并显示。(本地或是网络上的网页、图片、gif)
注意!要提前设置编码:webSettings.setDefaultTextEncodingName("UTF-8");
?
???? 2、LoadData???? 显示文字与图片内容 (模拟器1.5、1.6)
???? 3、LoadDataWithBase? 显示文字与图片内容(支持多个模拟器版本)
下面来看看代码片段:
?
- package?com.webviewdemo;??
- ??
- import?java.net.URLEncoder;??
- import?android.app.Activity;??
- import?android.os.Bundle;??
- import?android.webkit.WebView;??
- ??
- public?class?WebViewDemo?extends?Activity?{??
- ??
- ??private?WebView?????MyWebView;??
- ??static?final?String?mimeType?=?"text/html";??
- ??static?final?String?encoding?=?"utf-8";??
- ??
- ??/**?Called?when?the?activity?is?first?created.?*/??
- ??@Override??
- ??public?void?onCreate(Bundle?savedInstanceState)?{??
- ????super.onCreate(savedInstanceState);??
- ????setContentView(R.layout.main);??
- ????//??
- ????MyWebView?=?(WebView)?findViewById(R.id.MyWebview);??
- ????//?this.webHtml();??
- ????//?this.webImage();??
- ????//?this.localHtmlZh();??
- ????//?this.localImage();??
- ????//?this.localHtml();??
- ????this.localHtmlImage();??
- ??}??
- ??
- ??/**?
- ???*?直接网页显示?
- ???*/??
- ??private?void?webHtml()?{??
- ??
- ????try?{??
- ??????MyWebView.loadUrl("http://www.google.com");??
- ????}?catch?(Exception?ex)?{??
- ??????ex.printStackTrace();??
- ????}??
- ??}??
- ??
- ??/**?
- ???*?直接网络图片显示?
- ???*/??
- ??private?void?webImage()?{??
- ????try?{??
- ??????MyWebView?.loadUrl("http://www.google.com.hk/intl/zh-CN/images/logo_cn.gif");??
- ????}?catch?(Exception?ex)?{??
- ??????ex.printStackTrace();??
- ????}??
- ??}??
- ??
- ??/**?
- ???*?中文显示?
- ???*/??
- ??private?void?localHtmlZh()?{??
- ????try?{??
- ??????String?data?=?"<html>在模拟器?2.1?上测试</html>";??
- ??????//?utf-8编码处理(在SDK1.5模拟器和真实设备上都将出现乱码,SDK1.6上能正常显示)??
- ??????//?MyWebView.loadData(data,?mimeType,?encoding);??
- ??????//?对数据进行编码处理(SDK1.5版本)??
- ??????MyWebView.loadData(URLEncoder.encode(data,?encoding),?mimeType,?encoding);??
- ??????//?MyWebView.loadDataWithBaseURL(null,?data,?mimeType,?encoding,?null);??
- ??
- ????}?catch?(Exception?ex)?{??
- ??????ex.printStackTrace();??
- ????}??
- ??}??
- ??
- ??/**?
- ???*?显示本地图片文件?
- ???*/??
- ??private?void?localImage()?{??
- ????try?{??
- ??????//?本地文件处理??
- ??????String?str?=?"file:///android_asset/icon.png";??
- ??????MyWebView.loadUrl(str);??
- ????}?catch?(Exception?ex)?{??
- ??????ex.printStackTrace();??
- ????}??
- ??}??
- ??
- ??/**?
- ???*?显示本地网页文件?
- ???*/??
- ??private?void?localHtml()?{??
- ????try?{??
- ??????//?本地文件处理(如果文件名中有空格需要用+来替代)??
- ??????MyWebView.loadUrl("file:///android_asset/test.html");??
- ????}?catch?(Exception?ex)?{??
- ??????ex.printStackTrace();??
- ????}??
- ??}??
- ??
- ??/**?
- ???*?显示本地图片和文字混合的Html内容?
- ???*/??
- ??private?void?localHtmlImage()?{??
- ????try?{??
- ??????String?data?=?"<HTML>在模拟器?2.1?上测试,这是<IMG?src=\"APK'>file:///android_asset/igg.jpg\"/>APK里的图片";??
- ??????//?SDK1.5本地文件处理(不能显示图片)??
- ??????//MyWebView.loadData(URLEncoder.encode(data,?encoding),?mimeType,?encoding);??
- ??????//?SDK1.6及以后版本??
- ??????//MyWebView.loadData(data,?mimeType,?encoding);??
- ??????//?本地文件处理(能显示图片)??
- ??????MyWebView.loadDataWithBaseURL(null,?data,?mimeType,?encoding,?null);??
- ????}?catch?(Exception?ex)?{??
- ??????ex.printStackTrace();??
- ????}??
- ??}??
- }??
?
运行 localHtmlImage(...) 这个方法的结果:
在上面的所有方法中,模拟器2.1下 调用 LoadData 方法总是出现乱码。我想应该是2.1已经不在用它了吧。直接用LoadDataWithBaseURL 方法最简单,不再牵涉编码的转换。
其实我发现这不管是在线还是离线显示都可以使用LoadUrl方法!联网是默认utf-8,离线读取本地时需要设置默认编码!
本地url写法:
手机本地文件:?"file:///data/data/。。。“
SD:?"file:///mnt/sdcard/。。。“
?
如果图片无法离线显示 参考: ?http://androidturing.iteye.com/blog/1280946
?
?
?