Python csvwriter不喜欢unicode

2024-09-28 03:25:30 发布

您现在位置:Python中文网/ 问答频道 /正文

<太长了,读不下去了,结果有一个复杂的SQL查询,返回结果为.CSV格式。不幸的是,加拿大人的缺点是很多人喜欢在名字上加上口音。在

现在,这就是我所拥有的。我一开始并没有编写脚本,只是想让它工作以获取数据。SQL是正确的,只是被nano截断了。在

def getCommentsByGUID(reportDay):
        conn = mysql.connector.connect(host = dbServer, user = dbUser, passwd = dbPass, db = tscDBName)
        sqlresult = ''
        sql = 'select d.documentId, dn.created, dn.notes as Comment, u.login, d.fileName from DocumentInfo d \
inner join documentnotes dn on d.documentId=dn.documentId \
inner join User u on dn.userId=u.userID \
where d.companyId=%d and dn.created>\'%s 00:00:00\' and dn.created <\'%s 23:59:59\';' % (companyID, reportDay, reportDa$
        cursor = conn.cursor()
        cursor.execute (sql)
        sqlresult = cursor.fetchall()
        cursor.close ()
        reportWriter = csv.writer(open('%sFilename_comments_%s.csv' % (outputDir, reportDay), 'w'), delimiter=',', quotec$
        for results in sqlresult:
                reportWriter.writerow(results)

按原样运行会创建unicode错误,例如:

UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 366: ordinal not in range(128)

现在,经过大量研究,我遇到了这样的情况:

^{pr2}$

但仍然有同样的错误:

^{3}$

你知道我做错了什么,或者我还能做什么吗?谢谢!在


Tags: andcsvinsqlonconncursorinner
1条回答
网友
1楼 · 发布于 2024-09-28 03:25:30

MySQL连接显然以unicode对象的形式返回字符串,而传递给csv.writer的filehandle没有使用特定的编码打开,因此需要给定代表原始字节的str对象。在

解决方案1:在将字符串传递给writerow之前,先用您喜欢的编码(大概是UTF-8)对字符串进行编码:

for results in sqlresult:
    results = [x.encode('utf-8') if isinstance(x, unicode) else x for x in results]
    reportWriter.writerow(results)

解决方案2:以支持Unicode的模式打开输出文件句柄:

^{pr2}$

相关问题 更多 >

    热门问题