一.利用enca工具
通过sudo apt-get install enca命令来安装enca工具
1.查看编码:enca + 文件名即可,例如:
我的当前路径下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)
示例代码如下:
如果出现诸如:“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()函数来遍历目录进行,也是很方便的。下面是我写的批量转化编码的代码,写的不怎么好,请高手指点:
注: rtList = root.split("/")是为了接下来继续处理我的作业语料方便。如果直接是转换编码,不需这么麻烦,直接用root代替rtList列表中的成员。