Python2.7 中 UnicodeEncodeError:'ascii' codec can't encode characters 异常解决
Aug 15, 2016
1 minute read

Python的编码问题一直是一个它的一个缺点,特别是在处理中文上。Python提供了Unicode, str, utf-8, ascii等编码的相互转换,然而还是烦琐易错。 进行sqlite3数据读取并存入文件时碰到了错误 : UnicodeEncodeError: 'ascii' codec can't encode characters in position 19-22: ordinal not in range(128)

原因是数据库中含有中文字段,Unicode编码与ASCII编码的不兼容,这个Python脚本文件是由UTF-8编码的,同时Sqlite3数据库存取的也是UTF-8格式,而Python默认环境编码是Ascii:

>>> import sys
>>> print sys.getdefaultencoding()
ascii

Python调用ascii编码解码程序去处理字符流,当字符流不属于ascii范围内,就会抛出异常ordinal not in range(128),解决方法有三种

  • 方法一

更改默认编码

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

把这段代码加在Python文件头部,即可解决异常。

  • 方法二

在打开文件时指定编码

import codecs
fp = codecs.open('output.txt', 'a', 'utf-8')
fp.write(data)
fp.close()
  • 方法三

直接用系统输出byte,不用print

sys.stdout.buffer.write(data)

或者

os.write(sys.stdout.fileno(), data)


Back to posts


comments powered by Disqus