python中txt文件的编码转换问题utf-8转gbk

之前一直使用python内置的读写文件函数open,参数中不含encoding一项。

它实际上是,读入文件是什么编码,写出文件就是什么编码。

如今遇到一个问题,需要把一个utf8编码txt的部分内容另存,为了postprocess还要存成gbk编码。

解决一:codecs模块的读写函数codecs.open

# -*- coding: gbk -*-
#!usr/bin/env python
import sys
import codecs
 
with codecs.open(sys.argv[1], 'r', encoding='utf-8') as f, codecs.open(sys.argv[2], 'w',encoding='gbk') as wf:
    for line in f:
        lines = line.strip().split('\t')
        #newline = '{}\t{}\n'.format((lines[2]).encode('gbk'), (lines[3]).encode('gbk'))
        newline = lines[2]+'\t'.decode('gbk')+lines[3]+'\n'.decode('gbk')
        wf.write(newline)

读入时encoding指明文件编码(需已知),让程序用该方式decode读入txt,也就是说此时文件内容都是unicode对象字符了;

写出时encoding是目标保存编码方式,wf.write前要将组合字符串的编码统一。

只要注意将【读入字符】编码和【输入字符】编码统一,比如上面代码,lines[2]是unicode对象,'\t\n'是gbk编码,要么对前者encode,要么对后者decode。


解决二:直接对文件转码

其实不用在程序中纠结de-encode这么麻烦的问题,先直接存。

存好newtxt后,在shell使用iconv命令直接对文件转码:

[shenjiayu@cp01-shenjiayu: ~]$ iconv -f utf-8 -t gbk utf_file > gbk_file
不过如果在处理程序中出现了编码问题,那就还是要在de-encode上找办法了。

你可能感兴趣的:(Python)