Linux centos 服务器乱码问题

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

链接:https://www.zhihu.com/question/20523036/answer/35225920
来源:知乎
7z方案
需要安装p7zip和convmv,在Fedora下的命令是

su -c 'yum install p7zip convmv'
在ubuntu下的安装命令是

sudo apt-get install p7zip convmv
安装完之后,就可以用7za和convmv两个命令完成解压缩任务。

LANG=C 7za x your-zip-file.zip
convmv -f GBK -t utf8 --notest -r .
convmv -f gb2312 -t utf8 -r --notest *
第一条命令用于解压缩,而LANG=C表示以US-ASCII这样的编码输出文件名,如果没有这个语言设置,它同样会输出乱码,只不过是UTF8格式的乱码(convmv会忽略这样的乱码)。
第二条命令是将GBK编码的文件名转化为UTF8编码,-r表示递归访问目录,即对当前目录中所有文件进行转换。

  echo $LANG
  904  locale
  905  export LC_ALL=zh_CN.UTF-8
  906  export LANG=zh_CN.UTF-8

以下为python解决办法
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import sys
import zipfile

print "Processing File " + sys.argv[1]

file=zipfile.ZipFile(sys.argv[1],"r");
for name in file.namelist():
    utf8name=name.decode('gbk')
    print "Extracting " + utf8name
    pathname = os.path.dirname(utf8name)
    if not os.path.exists(pathname) and pathname!= "":
        os.makedirs(pathname)
    data = file.read(name)
    if not os.path.exists(utf8name):
        fo = open(utf8name, "w")
        fo.write(data)
        fo.close
file.close()

转载于:https://my.oschina.net/slagga/blog/698465

你可能感兴趣的:(Linux centos 服务器乱码问题)