【记录】关于编码格式导致的中文乱码问题

一. 问题描述

最近有个需求,解压压缩包提取其中的文件,处理rar、7z格式没啥问题,处理解压zip(项目中用的版本比较老)的时候,解压方法中需要传入编码格式,问题就来了。
使用windows系统打包zip和mac OS系统打包zip,在不手动设置编码格式的情况下(一般情况也没人会专门设置编码格式),windows系统默认编码格式为GBK,mac OS默认编码格式是UTF-8GBK编码,UTF-8解码,如果文件名有中文就会出现乱码,反之亦然,这和2种编码格式的对中文编码的规则有关。

二. 解决方式

  • 首先,默认windows系统编码格式为GBK,mac OS编码格式是UTF-8 ,不考虑打包时变更编码格式;
  • 其次,zip解压方法传入编码格式为ISO-8859-1,为什么传入ISO-8859-1,后面会解释;
  • 最后,通过判断是windows系统打包还是mac OS系统打包(mac OS打包解压后会出现__MACOSX文件夹,以此判断),对文件名进行重新编码。

当然,这种方式并不是一个完美的解决方案,对于不替换三方解压库,也算是一种强硬的解决方案。

三. 关于编码格式格式介绍

英文字母和中文汉字在不同字符集编码下的字节数,看表

编码格式字符类型字节数
UTF-8英文字母1
UTF-8中文汉字3
GBK英文字母1
GBK中文汉字2
ISO-8859-1英文字母1
ISO-8859-1中文汉字1

3.1 产生乱码的原因

编码和解码使用的不是同一种编码格式,就会出现乱码

3.2 文字描述太累,直接上图

运行结果⬇️

image.png

结合上面的表和这两张图,再加上下面这篇文章的理论,相信聪明的你一定会有很大的收获。
如果有时间还是动手写一遍,针对不同的情况,比如奇数,偶数汉字奇数汉字+英文偶数汉字+英文英文+奇数汉字英文+偶数汉字等之间的区别。

本次记录到此结束,⬇️【推荐并感谢】
UTF-8与GBK互转,为什么会乱码


如果文章对你有帮助,点个赞再走呗

如果文章中存在错误,还望评论区指出

一起成长,共同进步

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值