解决WebView加载本地文件乱码
一、问题描述
这几天现场反馈一些问题,主要是文件浏览有部分文件显示乱码,像这样:
而文件本身又是用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加载本地文件乱码的更多相关文章
- webView 加载本地文件 - html/htm pdf docx tx
- (void)viewDidLoad { [super viewDidLoad]; [self setupUI]; NSString *path = [[NSBundle mainBundle] p ...
- WebView加载本地Html文件并实现点击效果
Webview是用来与前端交互的纽,可以加载本地Html文件,和网页并实现交互的功能. WebView通过WebSetting可以使用Android原生的JavascriptInterface来进行j ...
- iOS WebView 加载本地资源(图片,文件等)
https://www.cnblogs.com/dhui69/p/5596917.html iOS WebView 加载本地资源(图片,文件等) NSString *path = [[NSBundle ...
- WebView加载本地html、js文件常见问题及解决办法
声明:基于android studio平台,php语言搭建服务器 目录: 一.JavaScript脚本语言没有反应 二.alert无法弹出 三.html页面之间不能跳转 四.屏幕缩放没有达到预期效果 ...
- Google浏览器如何加载本地文件
Chrome浏览器加载本地文件 一般来说,为了安全起见,浏览器是不能通过load方法来加载本地文件的,load方法只能加载远程服务器上的文件. 在浏览器默认的情况下,试图加载一个本地文件,会出现交叉域 ...
- worker中加载本地文件报错的解决方案
如果在一个swf的主线程中加载文件时,报安全沙箱的错误, 网上有诸多的解决方案.但是如果在一个worker中加载本地文件报类似如下的错误: *** 安全沙箱冲突 *** SecurityError: ...
- Jquery的load加载本地文件出现跨域错误的解决方案
如果用原生的AJAX是加载本地文件就不会出现错误.当然,这个jquery的load放在服务器上通过http加载还是支持的.也有例外比如在firefox和ie浏览器使用$.ajax加载本地html或tx ...
- Android WebView加载本地html并实现Java与JS交互
最近做的一个项目中,用到自定义地图,将自定义地图转换成html页面,现在需要做的是如何将本地的html加载到android中,并可以实现交互. 相关讲解: 其实webview加载资源的速度并不慢,但是 ...
- android使用webview加载flash文件
android 字段webview几乎实现了浏览器的全部功能,最近在使用webview加载不固定格式的文章,文章中有一部分嵌入了flash,下面就是webview可以进行视频需要进行的设置,代码如下: ...
随机推荐
- diango-团队介绍
1.使用django-admin startproject show创建项目,并使用python manage.py startapp team_show创建应用 2.进行相关的配置 3.代码的实现
- 让ckplayer支持m3u8格式的播放
一 ckplayer官网下载. 直接解压到本地,注意配置里面的默认文件路径,最好是放在服务器的根目录下,这样就可以去访问外链接的资源,官网也是这么推荐的,我这里就直接用node开启一个小服务器. 二 ...
- 解决Popup StayOpen=true时,永远置顶的问题
Popup设置了StayOpen=true时,会置顶显示. 如弹出了Popup后,打开QQ窗口,Popup显示在QQ聊天界面之上. 怎么解决问题? 获取绑定UserControl所在的窗口,窗口层级变 ...
- vue--"卡片层叠" 组件 开发小记
背景:影城移动点餐web App增加会员卡支付功能 需求:确认订单页点击会员卡项弹出会员卡列表,多张会员卡依次叠加覆盖上一张80%的高度,点击任意卡片则改卡片置为当前卡片,只有当前卡片显示全部卡片信息 ...
- Java Socket通信代码片
package zhang; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOExcept ...
- Spring-cloud (七)自定义HystrixCommand
前提 1.在继续学习Hystrix之前,向关注本人博客的各位致歉 由于之前的项目起名以及服务之间的名称不是很规范,所以我修改了这些名称方便后来的代码管理,这些代码可以在本人github中找到,这里贴出 ...
- python学习之路基础篇(第八篇)
一.作业(对象的封装) 要点分析 1.封装,对象中嵌套对象 2.pickle,load,切记,一定要先导入相关的类二.上节内容回顾和补充 面向对象基本知识: 1.类和对象的关系 2.三大特性: 封装 ...
- golang 线程与通道
首先我们来看线程,在golang里面也叫goroutine 在读这篇文章之前,我们需要了解一下并发与并行.golang的线程是一种并发机制,而不是并行.它们之间的区别大家可以上网搜一下,网上有很多的介 ...
- 用js来实现那些数据结构13(树01-二叉搜索树的实现)
前一篇文章我们学会了第一个非顺序数据结构hashMap,那么这一篇我们来学学树,包括树的概念和一些相关的术语以及二叉搜索树的实现.唉?为什么不是树的实现,不是二叉树的实现.偏偏是二叉搜索树的实现?嗯, ...
- Dapper连接与事务的简单封装
增删改查方面,已经有Dapper.Extension这么强大的工具了,我也实在没啥好写的,就随手写了个看起来比较优雅的连接与事务的封装.在之后使用Dapper.Extension类库时,完全可以照搬进 ...