一个在Python中将中文乱码文字转码恢复的问题
先说下来历和需求,Mac系统中的压缩包,在Windows系统下的一些压缩软件解压后,中文文件名常会变成乱码,如何用Python将文件名改回来,这是个问题。当然,最省事的方法是换个压缩软件就行,所说winrar6.0以上就没这问题了。可是,这问题引起了我对如何用python来解决的兴趣,如是折腾了一晚。
问题产生的原因
Mac系统默认中文字符集是utf-8,windows默认的是gbk,解压软件强制把utf-8编码的中文字符用gbk编码显示出来,当然是一堆乱码了。清楚了原因,解决的思路也就简单明了了。
直接来代码吧
## 比如Mac中有这个文件:'这是一个文件.docx'
## windows下解压软件强制错误转码后,会显示为:'杩欐槸涓涓鏂囦欢.docx'
## 这个过程相当于用pyhon执行了以下操作:
mac=file.encode('utf8').decode('gbk',errors='ignore')
## 我们用Python再强制转码回来就行了:
win=mac.encode('gbk').decode('utf8',errors='ignore')
print(win)
## '这是文件.docx'
补充说明
这里需要说明的是,全角半角字符混合的情况下,这么简单强制转换并不能完全恢复原样字符串,我们不了解解压软件强制转换的参数,所以只能采用’ignore’保证代码正常运行,但结果是一些字符可能会在转换过程中被舍弃,比如上面的代码转换回来后,结果只显示为:‘这是文件.docx’,算是变成我们能认识的文字,并非原样。