终于知道怎么处理 Linux 下 zip 解压 文件名乱码的问题了
在 windows 下打包的 zip 文件,文件名是以 GBK 的方式编码的,在 Linux 下解压会出现文件名乱码的问题,我以前使用 用 wine 安装 7z 的方法来解决这个问题。
现在在 debian 的邮件列表 里看到了这个解决方案:zip解压乱码
用 7z 在 LANG=C 的环境下解压 zip 文件:
LANG=C 7z x zipfile.zip
测试文件名的编码转换,查看是否有乱码 (PS: 只需要关注转换后的文件名是否有乱码,不需要关注目录名):
convmv -f cp936 -t utf8 -r -- *
如果没有乱码,就进行实际的转换:
convmv -f cp936 -t utf8 -r --notest -- *
如果还需要转换某个文件的编码:
iconv -f cp936 -t utf8 -o output.txt input.txt
比如,对于这个文件输出如下:
$ LANG=C 7z x 测一测.zip
Processing archive: 测一测.zip
Extracting ���
Extracting ����ĵ�.txt
Everything is Ok
$ convmv -f cp936 -t utf8 -r -- *
Starting a dry run without changes...
mv "����ĵ�.txt" "���我的文档.txt"
mv "./��� "./测一测"
Skipping, already UTF-8: ./测一测.zip
No changes to your files done. Use --notest to finally rename the files.
$ convmv -f cp936 -t utf8 -r --notest -- *
mv "����ĵ�.txt" "���我的文档.txt"
mv "./��� "./测一测"
Skipping, already UTF-8: ./测一测.zip
Ready!
$ tree
.
├── 测一测
│ └── 我的文档.txt
└── 测一测.zip
$ iconv -f cp936 -t utf8 测一测/我的文档.txt
你好,世界!