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

一. 问题描述

最近有个需求,解压压缩包提取其中的文件,处理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互转,为什么会乱码


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

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

一起成长,共同进步

你可能感兴趣的:(记录:关于编码格式导致的中文乱码问题)