一、问题描述

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

而文件本身又是用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包

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

解决WebView加载本地文件乱码的更多相关文章

  1. webView 加载本地文件 - html/htm pdf docx tx

    - (void)viewDidLoad { [super viewDidLoad]; [self setupUI]; NSString *path = [[NSBundle mainBundle] p ...

  2. WebView加载本地Html文件并实现点击效果

    Webview是用来与前端交互的纽,可以加载本地Html文件,和网页并实现交互的功能. WebView通过WebSetting可以使用Android原生的JavascriptInterface来进行j ...

  3. iOS WebView 加载本地资源(图片,文件等)

    https://www.cnblogs.com/dhui69/p/5596917.html iOS WebView 加载本地资源(图片,文件等) NSString *path = [[NSBundle ...

  4. WebView加载本地html、js文件常见问题及解决办法

    声明:基于android studio平台,php语言搭建服务器 目录: 一.JavaScript脚本语言没有反应 二.alert无法弹出 三.html页面之间不能跳转 四.屏幕缩放没有达到预期效果 ...

  5. Google浏览器如何加载本地文件

    Chrome浏览器加载本地文件 一般来说,为了安全起见,浏览器是不能通过load方法来加载本地文件的,load方法只能加载远程服务器上的文件. 在浏览器默认的情况下,试图加载一个本地文件,会出现交叉域 ...

  6. worker中加载本地文件报错的解决方案

    如果在一个swf的主线程中加载文件时,报安全沙箱的错误, 网上有诸多的解决方案.但是如果在一个worker中加载本地文件报类似如下的错误: *** 安全沙箱冲突 *** SecurityError: ...

  7. Jquery的load加载本地文件出现跨域错误的解决方案

    如果用原生的AJAX是加载本地文件就不会出现错误.当然,这个jquery的load放在服务器上通过http加载还是支持的.也有例外比如在firefox和ie浏览器使用$.ajax加载本地html或tx ...

  8. Android WebView加载本地html并实现Java与JS交互

    最近做的一个项目中,用到自定义地图,将自定义地图转换成html页面,现在需要做的是如何将本地的html加载到android中,并可以实现交互. 相关讲解: 其实webview加载资源的速度并不慢,但是 ...

  9. android使用webview加载flash文件

    android 字段webview几乎实现了浏览器的全部功能,最近在使用webview加载不固定格式的文章,文章中有一部分嵌入了flash,下面就是webview可以进行视频需要进行的设置,代码如下: ...

随机推荐

  1. 【完整项目】使用Scrapy模拟HTTP POST,获取完美名字

    1. 背景 最近有人委托我给小孩起个名字,说名字最好符合周易五行生克理论,然后给了我个网址,说像是这个网站中的八字测名,输入名字和生辰八字等信息,会给出来这个名字的分数和对未来人生的预测.当父母的自然 ...

  2. Windows下免安装版mysql5.7的初始密码

    MySQL5.7之后,初始密码不在默认为空,而是随机生成的密码. 在mysql/data目录下,生成了一个.err文件(等同linux下的log日志文件,此文件会被mysql服务占用). 使用记事本可 ...

  3. 数据结构之B树、B+树(一)

    B-树 什么是B-树? B树是一种查找树,我们知道,这一类树(比如二叉搜索树,红黑树等等)最初生成的目的都是为了解决某种系统中,查找效率低的问题.B树也是如此,它最初启发于二叉搜索树,二叉搜索树的特点 ...

  4. 【linux】---常用命令整理

    linux常用命令整理 一.ls命令 就是list的缩写,通过ls 命令不仅可以查看linux文件夹包含的文件,而且可以查看文件权限(包括目录.文件夹.文件权限)查看目录信息等等 常用参数搭配: l ...

  5. postgresql 安装使用

    www.postgresql.org去下载你需要的版本,我下载的9.6.8 安装过程中会让你输入一次密码,其余的默认就ok 默认超级用户名postgres 打开 pgadmin4,我们将语言改为中文会 ...

  6. Linux文件基本操作

    TIP:Tab键可以自动补全命令 首先要了解Linux树形结构 1./- 根每一个文件和目录从根目录开始.只有root用户具有该目录下的写权限.请注意,/root是root用户的主目录,这与/.不一样 ...

  7. 混合式应用开发之Cordova+vue(1)

    一.Cordova创建应用 cordova create oneApp Cordova创建应用出错 Cordova安装时不能使用cnpm 应该使用npm,cnpm虽然快但是后期出的错绝对比这省下来的时 ...

  8. JQ简单实现无缝滚动

    $(function(){ $("ul li:lt(5)").clone().appendTo("ul"); var $width = $("ul l ...

  9. A potentially dangerous Request.Form value was detected from the client问题处理

    问题剖析: 用户在页面上提交表单到服务器时,服务器会检测到一些潜在的输入风险,例如使用富文本编辑器控件(RichTextBox.FreeTextBox.CuteEditor等)编辑的内容中包含有HTM ...

  10. Stall Reservations

    Oh those picky N (1 <= N <= 50,000) cows! They are so picky that each one will only be milked ...