UnicodeEncodeError: ‘ascii’ codec can’t encode异常错误

来源:互联网 发布:大地windows 编辑:程序博客网 时间:2024/05/16 06:35

最近在群里总是遇到有人问这个问题,其实这个错误的本身和代码的编写应该没关系,代码的语法等应该是没有问题的。

原来的代码是这样的

# -*- coding: UTF-8 -*-import sqlite3 def gsel(cur):    cur.execute("SELECT * FROM collection") def main():    conn = sqlite3.connect("build.db3")    cur = conn.cursor()    gsel(cur)    # conn.commit()    rs = cur.fetchall()     fp = open("output.txt", "w")    for row in rs:        fp.write(row[1]) # 读取并写入第2列数据 if __name__ == '__main__':    main()

在python 2.7环境下运行报出错误


这是由于编码的错误。python本身是有默认的编码,可以通过以下方式获得:

import sys

print sys.getdefaultencoding()

如果你的代码使用的是utf-8编码,但是默认的编码是ascii,那么,这两个就会不兼容,出现以上的错误。


可以通过sys.setdefaultencoding(‘utf-8′)方式来修改python的默认编码。但是在python 2.7环境下,直接这么用就会出现如下AttributeError异常


其实并不是因为sys没有setdefaultencoding()而是在调用之前需要先调用reload(sys):

import sys

reload(sys)

sys.setdefaultencoding('utf-8')


修改的代码如下:

# -*- coding: UTF-8 -*- import sys     # 1import sqlite3 def gsel(cur):    cur.execute("SELECT * FROM collection") def main():    reload(sys)                         # 2    sys.setdefaultencoding('utf-8')     # 3     conn = sqlite3.connect("build.db3")    cur = conn.cursor()    gsel(cur)    # conn.commit()    rs = cur.fetchall()     fp = open("output.txt", "w")    for row in rs:        fp.write(row[1]) if __name__ == '__main__':    main()

本文借鉴博文:http://wangye.org/blog/archives/629/#userconsent#     王晔的流水账





0 0
原创粉丝点击