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

1、问题描述

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

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

 

2、解决方案

2.1、判断数据流的编码

参考下面这篇文章:

https://blog.csdn.net/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。至于别的编码,暂时不考虑,如果以后有用到再进行扩展。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值