使用Python处理中文语料时编码问题的常用处理方法
Python内部处理编码问题的逻辑
python内部使用unicode编码存储字符串,在读入、输出文件,如使用open函数时,需要指定读入文件的编码方式:
with open("xxx.txt", "r"/"w", encoding="UTF-8"/"GBK") as fin:
pass
这一步解决的是文件内部编码->python内部编码(unicode)->文件内部编码。如果转换前后的编码在表示的字符上不兼容,就会报错。
如果不涉及文件,python也可以用encode、decode函数得到、解析对应编码的字节表示,如:
gbk_rep = "a".encode("GBK") # 得到字符的GBK字节码表示
str = gbk_rep.decode("GBK") # 解析字节码表示,得到python内部的unicode表示
# 可以指定遇到编码错误UnicodeEncodeError的处理方式
gbk_rep = "a".encode("GBK", "ignore") # 忽略,相当于用空字符替换问题字符
gbk_rep = "a".encode("GBK", "replace") # 用问号?替换问题字符
# 要得到字符的unicode编码表示,可以使用”unicode_escape“
unicode_rep = "我".encode("unicode_escape")
Python编码问题报错可以获得的信息
一般会处理UnicodeEncodeError和UnicodeDecodeError两类错误,两者可以在用try···except···
处理异常问题时捕获,并输出。
try:
_ = content.encode("GBK")
except UnicodeEncodeError as ee:
print(ee)
print(ee.args) # 输出一个元祖,内容为[尝试编码的格式,尝试编码的文本,错误字符启示位置,错误字符终止位置]