MENU

linux下用enca和python进行编码转换

January 15, 2015 • 生活

一.利用enca工具

通过sudo apt-get install enca命令来安装enca工具

1.查看编码:enca + 文件名即可,例如:

2015-01-15 00:24:30 的屏幕截图

 

 

 

我的当前路径下test.TXT的编码为GB2312

2.转换编码

由于linux下并不支持gb2312编码,如果打开gb2312的文本必定是乱码,这时候就必须进行转码。

格式是这样的:enca -L 当前语言 -x 目标编码 文件名.如果想要批量转换,命令是这样::enca -x utf-8 * ,就将当前目录下所有文件都转换为utf-8编码。

但是,enca不能将当前文件夹下包含子文件夹下的文件也转换为指定编码

二.使用python

python内部编码为unicode,我们可以使用解码(decode)和编码(encode)利用unicode来达到编码转化的目的。这也是python对字符串处理中最经常使用的方法之一。

解码(decode)就是把文本原本的编码(如,我上面test.TXT编码为2312)转换为unicode编码。

编码(encode)就是把unicode编码转化为你想要的编码(如:我想转化为utf-8)

示例代码如下:

2015-01-15 00:44:14 的屏幕截图

 

 

 

 

 

 

如果出现诸如:“UnicodeDecodeError: ‘XXX' codec can't decode bytes in position 2-5: illegal multibyte sequence”之类的错误,可以在decode时,设置参数“ignore”,如上面的就写为saveText =fl.read().decode("GB2312",'ignore').encode("utf-8")。

decode中的参数设置:

默认的参数就是strict,代表遇到非法字符时抛出异常;
如果设置为ignore,则会忽略非法字符;
如果设置为replace,则会用?号取代非法字符;
如果设置为xmlcharrefreplace,则使用XML的字符引用。

 

如果想要用python检测编码什么的,chardet模块是很强大的。

如果想要批量处理,可以利用os模块中的walk()函数来遍历目录进行,也是很方便的。下面是我写的批量转化编码的代码,写的不怎么好,请高手指点:

2015-01-15 02:30:01 的屏幕截图

注: rtList = root.split("/")是为了接下来继续处理我的作业语料方便。如果直接是转换编码,不需这么麻烦,直接用root代替rtList列表中的成员。

Last Modified: December 28, 2022