尝试创建CSV或导出时,u'\ u2019'的Python UnicodeEncodeError错误

时间:2018-08-23 05:00:32

标签: python python-2.7 encoding

我正在尝试从数据库中导出一些数据到CSV,但我正努力了解以下UnicodeEncodeError:

>>> sample
u'I\u2019m now'
>>> type(sample)
<type 'unicode'>
>>> str(sample)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 1: ordinal not in range(128)
>>> print sample
I’m now
>>> sample.encode('utf-8', 'ignore')
'I\xe2\x80\x99m now'

我很困惑。是unicode吗?在这种情况下,UnicodeEncodeError实际上是什么意思?为什么打印效果很好?如果我希望能够将这些数据保存到CSV文件中,该如何处理编码,以便在尝试使用csv.writer的{​​{1}}时不会产生错误?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

  1. 这是一个Python unicode对象,您使用type(sample)进行了验证。另外,它包含Unicode,因此您可以将其序列化为具有Unicode编码之一的文件。

  2. 需要仔细阅读编码错误:它是无法代表该字符串的“ ascii”编解码器。 ASCII只是代码点低于127的Unicode子集。您的字符串使用代码点0x2019,因此无法使用ASCII进行编码。

  3. print之所以有效,是因为它已正确实现,并且不会尝试将字符串编码为ASCII。我认为如果使用例如stdout设置您会遇到类似的错误。 Latin-1作为编码,但看来您的系统可以处理的Unicode范围更广。

  4. 为了编写CSV文件,您可以仅使用UTF-8作为该文件的编码。我还没有使用CSV模块,所以我不确定如何使用。无论如何,如果它不起作用,则应在其他问题中提供不作为MCVE的确切代码。

顺便说一句:请升级到Python 3!与2.x系列相比,它在字符串/ Unicode处理方面有了许多改进。