Python chardet GBK转UTF8 中文乱码

新手上路,请多包涵

因工作需要,要把android项目从Eclipse转到Android Studio,然后想通过Python进行批量转码,但是转码后出现中文乱码。
使用的python版本是2.7,chardet是官网下载的,系统是window7
项目默认的编码格式是GBK,但chardet.detect判断却是gb2312

def convert(filename, in_enc = ["ASCII","GB2312","GBK","gb18030"], out_enc = "UTF-8"):
    try:
        print "convert " + filename
        content = open(filename).read()
        result = chardet.detect(content)
        coding = result.get("encoding")
        for k in in_enc:
            if k == coding:
                print coding + " To UTF-8"
                new_content = content.decode(coding).encode(out_enc)
                open(filename,'w').write(new_content)
                print "done."
                break;
    except IOError,e:
        print " error"
阅读 7.8k
2 个回答

GBK 是 GB2312 的超集,当字符在 GBK 集合中,但不在 GB2312 时,就会乱码。
当 chardet.detect 识别出 GB2312 时,直接用 GBK 或者 GB18030 decode 即可。

  1. 字符编码声明:在代码开头声明编码格式 //用来解决decode encode中python2.x 会先转成str再进行解编码,而str默认采用ASCII的问题

  2. 使用 codecs 的 open 函数处理文本文件 //python2.x open函数有同样的问题。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题