移动端浏览器上直接打开txt显示文本乱码

1、问题描述

后台往前端输出流中没有指定编码,所以会默认使用浏览器本身的编码。移动端的主流浏览器不会像pc端一样自动进行编码转换,所以当文本的编码是utf-8的时候会显示正常,但是当编码为GB2312或ANSI时,显示为乱码。附件为几个不同编码的文本

使用notepad++打开右下角会显示具体编码:

 

2、解决方案

2.1、判断数据流的编码

参考下面这篇文章:

https://blog.csdn.net/qq_33854869/article/details/77159239

我们使用tika来进行流的编码判断,需要注意引用的包:下面红颜色的包一定要引用,否则会报错。

 

            org.apache.tika

            tika-core

            1.22

        

         

            org.apache.tika

            tika-parsers

            1.22

        

 

Tika对流的编码的判断需要对流进行读取,但是InputStream是单向读取的,也不能reset,所以需要将流复制一份,原始的流继续做操作。不这样做的会导致因为流指向最后一位,最后下载的文件都是空文件。

移动端浏览器上直接打开txt显示文本乱码_第1张图片

移动端浏览器上直接打开txt显示文本乱码_第2张图片

2.2、设置返回流的编码

通过2.1的方式对流进行处理以后会有个bug,比如文件类型是ANSI,但是会显示KOI8-R编码,但是对UTF-8的判断是准确的,为了简化操作,只要流的编码是以UTF开头的,一律为UTF-8,否则为GB2312。至于别的编码,暂时不考虑,如果以后有用到再进行扩展。

移动端浏览器上直接打开txt显示文本乱码_第3张图片

你可能感兴趣的:(踩坑点,踩坑点)