解决zip文件中文乱码问题

       后台微服务运行在linux环境里,前端Vue。在一个项目中,把后台的文件打包成zip,下载到前台。结果发现zip文件名本身乱码,zip文件内压缩的文件也是乱码。所谓乱码,程序员都见过,就是中文变成了乱七八糟的字符。

        起初觉得问题比较简单,网上导出都是解决方案。真正试试,一个不灵。最后还是公司技术大佬自己解决的。

        不能说网上的东西都是错了,但确实很大一部分都是没有自己实践,直接转的。我们试了无效也不能说就是错的,可能和环境、版本等等都有关系。自己实践吧。

        1、Zip文件中的文件名使用的是一种称为"CP437"的字符集编码,所以要按CP437编码文件名字。 

            ZipEntry ze = new ZipEntry(文件名字);

            结果:文件名字这各种转换,无效,怎么折腾都是乱码,而且更乱。

             我们案例的正解:

        ZipOutputStream zos = new ZipOutputStream(fos);
        zos.setEncoding(“UTF-8”);

       2、zip文件名本身乱码

      FileOutputStream fos = new FileOutputStream(文件名字);

           文件名字这里也是各种转码,折腾,全部无效。

           我们案例的正解:

                   问题根本就不出现在这里,而是出现在前端。文件名称是通过Content-Disposition头传递的,attachment; filename=文件名,这里的文件名字要java.net.URLEncoder.encode处理下。

           如果各位也遇到类似问题,可以参照下。关键是分析到底那步出现的问题:是服务器端生成时出现的,还是传递过程中发生的。

         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大道不孤,众行致远

请给我加油

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值