当需要把多个不同编码的文件合并成一个的时候,unicode是一个很好的选择。但是如果把不同的编码转换成unicode,python并没有提供一个很好的方法。

Python内部是使用unicode来编码,但要把不同的编码转换成unicode,首先需要知道需要转换的内容是什么编码的。这种设计用来处理转码特定的编码文件没有问题,但是要写一个通用的工具,将是不可能的任务。

但是对于一些特殊的项目,还是可以做一些事情的。有一个检测文本编码类型的库可以借用:chardet

chardet的使用很简单。它的输入如下:

1
{'confidence': 0.62467997951868914, 'encoding': 'GB2312'}

从它的输出可以看到,这并不是一个非常有效的方法,但是聊胜于无。

在我的案例里面,是这样使用的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sf = codecs.open("xxx.txt", "w", "utf-8")
of1 = codecs.open(f1, "r")
line1 = of1.read()
enc = chardet.detect(line1)
print enc
if enc['encoding'] == 'utf-8':
line1 = unicode(line1, 'utf-8')
else:
line1 = line1.decode('gb18030')
sf.write(line1)

对中文需要注意的是, 虽然chardet 能检测出的中文编码是gb2312,但是最好用gb18030来处理它,后者的覆盖会更全一点。

Comments

2012-09-08