UnicodeEncodeError:“ascii”编解码器无法使用writerow和map对字符错误进行编码

2024-06-02 13:43:24 发布

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

在Python2.7和Ubuntu14.04中,我试图写入一个csv文件:

csv_w.writerow( map( lambda x: flatdata.get( x, "" ), columns ))

这给了我臭名昭著的

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

错误。在

这里通常的建议是使用unicode(x).encode("utf-8") 我已经尝试过了,而且在get中只对两个参数.encode("utf-8")

csv_w.writerow( map( lambda x: flatdata.get( unicode(x).encode("utf-8"), unicode("").encode("utf-8") ), columns ))

但我还是犯了同样的错误。在

任何帮助我们摆脱错误都是非常感谢的。(我认为unicode("").encode("utf-8")很笨拙,但我还是个新手)。在

编辑: 我的全部课程是:

^{pr2}$

抛出错误UnicodeEncodeError: 'ascii' codec can't encode character u'\u2022' in position 14: ordinal not in range(128):的修订的单个tweet是可用的here。在

根据Alistair的建议,我安装了unicodesv。 步骤是: 从here下载zip

安装:sudo pip install/path/to/zipfile/python unicodesv-主.zip在

import unicodecsv as csv
csv_w = csv.writer(f, encoding='utf-8')
csv_w.writerow(flatdata.get(x, u'') for x in columns)

Tags: columnscsvlambdainmapget错误ascii
2条回答
csv_w.writerow( map( lambda x: flatdata.get( unicode(x).encode("utf-8"), unicode("").encode("utf-8") ), columns ))

您已经对传递给flatdata.get()的参数进行了编码,即dict键。但是unicode字符不在键中,它们在值中。您应该对get()返回的值进行编码:

^{pr2}$

在没有看到数据的情况下,您的数据似乎包含Unicode数据类型(请参见How to fix: "UnicodeDecodeError: 'ascii' codec can't decode byte"获取Unicodestr类型的简要说明)

你对encode的解决方案很容易出错——任何一个包含非ascii编码的str都将在unicode()时抛出一个错误(请参阅前面的链接以获得解释)。在

在写入CSV之前,您应该将所有数据转换成Unicode类型。由于Python2.7的CSV模块已损坏,您将需要使用drop-in替换:https://github.com/jdunck/python-unicodecsv。在

您还可以将map拆分成一个单独的语句,以避免混淆。确保提供完整的stacktrace和代码示例。在

相关问题 更多 >