admin管理员组文章数量:1616032
1、问题描述
后台往前端输出流中没有指定编码,所以会默认使用浏览器本身的编码。移动端的主流浏览器不会像pc端一样自动进行编码转换,所以当文本的编码是utf-8的时候会显示正常,但是当编码为GB2312或ANSI时,显示为乱码。附件为几个不同编码的文本
使用notepad++打开右下角会显示具体编码:
2、解决方案
2.1、判断数据流的编码
参考下面这篇文章:
https://blog.csdn/qq_33854869/article/details/77159239
我们使用tika来进行流的编码判断,需要注意引用的包:下面红颜色的包一定要引用,否则会报错。
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-core</artifactId>
<version>1.22</version>
</dependency>
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-parsers</artifactId>
<version>1.22</version>
</dependency>
Tika对流的编码的判断需要对流进行读取,但是InputStream是单向读取的,也不能reset,所以需要将流复制一份,原始的流继续做操作。不这样做的会导致因为流指向最后一位,最后下载的文件都是空文件。
2.2、设置返回流的编码
通过2.1的方式对流进行处理以后会有个bug,比如文件类型是ANSI,但是会显示KOI8-R编码,但是对UTF-8的判断是准确的,为了简化操作,只要流的编码是以UTF开头的,一律为UTF-8,否则为GB2312。至于别的编码,暂时不考虑,如果以后有用到再进行扩展。
版权声明:本文标题:移动端浏览器上直接打开txt显示文本乱码 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1728735644a1170868.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论