解决WebView加载本地文件乱码
2016-07-14 13:29
218 查看
一、问题描述
这几天现场反馈一些问题,主要是文件浏览有部分文件显示乱码,像这样:
而文件本身又是用WebView加载的,出现有的文件正常有的文件不正常。
二、问题解决
webView 加载主要有:loadUrl(),loadData(),loadDataWithBaseURL()几个方法,我们是直接使用的loadUrl(),传入文件路径。初次:
添加:setDefaultTextEncodingName(“utf-8”); //设置文本编码
设置文本编码,运行后无效。
然后怀疑是否是乱码格式不是UTF-8,
再次:
添加:setDefaultTextEncodingName(“gbk”); //设置文本编码
证明了我的猜想,这次乱码的文件正常了,不乱码的文件疯了。。。。
问题解决的入口来了:如何动态的获取文件编码格式,然后在loadUrl()之前设置默认编码,这样就可以实现乱码问题的解决。
查阅相关资料后,比较靠谱的方法:
获取文件格式:用的开源工程 JCharDet
public String getFileEncoding(String filePath){ CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance(); detector.add(new ParsingDetector(false)); detector.add(JChardetFacade.getInstance()); detector.add(UnicodeDetector.getInstance()); Charset charset = null; File file = new File(filePath); try { charset = detector.detectCodepage(file.toURI().toURL()); } catch (Exception e) { e.printStackTrace(); } String charsetName = "GBK"; if(charset != null){ if(charset.name().equals("US-ASCII")){ charsetName = "ISO-8859-1"; }else if(charset.name().startsWith("UTF")){ charsetName = charset.name(); } } return charsetName; }
然后调用:
setDefaultTextEncodingName(Tools.getFileEncoding(path)); loadUrl(path);
OK,问题顺利解决:
相关文章推荐
- ImageLoader源码分析
- 本地通知
- Xamarin Anroid App访问网站失败
- 【Unity3D自学记录】Unity5之实时GI环境光
- Xamarin Anroid App访问网站失败
- Android实现推送方式解决方案
- gridview设置第一行距顶部的距离
- android提醒闹铃
- Android Studio 使用技巧
- iOS xcode真机调试获取手机屏幕截屏
- 详谈Activity生命周期函数调用时机
- RecyclerView简单使用介绍
- SuperQQ小项目遇到的问题(1)
- Ecplise项目和AndroidStudio项目之间的转换
- iOS开发中Can't find keyplane that supports type 5 for keyboard iPhone-Portrait-PhonePad的解决方法
- AppCompatActivity和Activity主题问题
- Android Studio show line numbers
- 为iOS项目集成CocoaPods支持
- Unity对象的简单平移与旋转
- Android Studio中的.gradle文件解读