一. 问题描述
最近有个需求,解压压缩包提取其中的文件,处理rar、7z格式没啥问题,处理解压zip(项目中用的版本比较老)的时候,解压方法中需要传入编码格式,问题就来了。
使用windows系统打包zip和mac OS系统打包zip,在不手动设置编码格式的情况下(一般情况也没人会专门设置编码格式),windows系统默认编码格式为GBK
,mac OS默认编码格式是UTF-8
,GBK
编码,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 文字描述太累,直接上图
运行结果⬇️
结合上面的表和这两张图,再加上下面这篇文章的理论,相信聪明的你一定会有很大的收获。
如果有时间还是动手写一遍,针对不同的情况,比如奇数,偶数汉字
、奇数汉字+英文
、偶数汉字+英文
、英文+奇数汉字
、英文+偶数汉字
等之间的区别。
本次记录到此结束,⬇️【推荐并感谢】
UTF-8与GBK互转,为什么会乱码
如果文章对你有帮助,点个赞再走呗
如果文章中存在错误,还望评论区指出
一起成长,共同进步