解决WebView加载本地文件乱码

一、问题描述

这几天现场反馈一些问题,主要是文件浏览有部分文件显示乱码,像这样:

解决WebView加载本地文件乱码_第1张图片

而文件本身又是用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,问题顺利解决:

解决WebView加载本地文件乱码_第2张图片

附上获取文件编码格式工具方法和相关jar包

点击获取文件编码格式下载

你可能感兴趣的:(webView)