我从ZODB(Zope对象数据库)接收一些数据。我收到一个mybrains
对象。然后我会:
o = mybrains.getObject()
我在我的项目中收到一个“Person”对象。那么,我可以
^{pr2}$在我的课上做print b
我得到:
José Carlos
和print b.name.__class__
<type 'unicode'>
我有很多“人”的东西。它们被添加到列表中。在
names = [o.nome, o1.nome, o2.nome]
然后,我试图用这些数据创建一个文本文件。在
delimiter = ';'
all = delimiter.join(names) + '\n'
没问题。现在,当我做一个print all
时,我有:
José Carlos;Jonas;Natália
Juan;John
但当我试图创建一个文件时:
f = open("/tmp/test.txt", "w")
f.write(all)
我遇到了这样一个错误(位置不一样,因为我更改了名称)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 84: ordinal not in range(128)
如果我已经可以用“正确”的表单打印出来显示它,为什么我不能用它来写文件呢?我应该使用哪种编码/解码方法来编写包含此数据的文件?在
我使用的是python2.4.5(无法升级)
write
正在尝试使用ascii编解码器对字符串进行编码(它没有编码重音字符的方式,比如é或á)。在而是使用
或者选择其他编解码器(如cp1252)来对字符串中的字符进行编码。在
上面使用了PS.
all.decode('utf-8')
,因为f.write
需要一个unicode字符串。Better than usingall.decode('utf-8')
将尽早将所有字符串转换为unicode,在unicode中工作,并在必要时才将其编码为特定的编码,如'utf-8'。在PPS。看起来}将是unicode字符串。那么
^{pr2}$names
可能已经是unicode字符串的列表。在这种情况下,将delimiter
也定义为unicode字符串:delimiter = u';'
,因此{应该可以工作(除非Python2.4有一些我不知道的问题。)
如果“utf-8”不起作用,请记住尝试其他包含您所需字符的编码,并且您的计算机知道这些字符。在Windows上,这可能意味着“cp1252”。在
您告诉Python打印
all
,但是由于all
没有固定的计算机表示,Python首先必须将all
转换为某种可打印的形式。因为您没有告诉Python如何进行转换,所以它假设您需要ASCII。不幸的是,ASCII只能处理0到127之间的值,all
包含超出该范围的值,因此您会看到一个错误。在要修复此用法:
相关问题 更多 >
编程相关推荐