一、问题描述
这几天现场反馈一些问题,主要是文件浏览有部分文件显示乱码,像这样:
而文件本身又是用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,问题顺利解决:
附上获取文件编码格式工具方法和相关jar包