为什么在使用非ASCII字符时无法转换字符串?

时间:2014-06-28 19:29:48

标签: python string unicode ascii

我在Python中遇到了一个小问题。我无法打印包含“é”字符的字符串。我会解释一下:

  for actor in show.actor_objects:
     f.write(u"\n  <actor>")
     f.write(u"\n    <name>{0}</name>".format(str(actor.Name).encode('ascii', 'ignore')))
     f.write(u"\n    <role>{0}</role>".format(str(actor.Role).encode('ascii', 'ignore')))
     f.write(u"\n  </actor>")

我收到以下错误消息:

root@vroum:21:26:44#~:?1# python test.py -s 2 -n Kaamelott -o outfile.txt -f 0 -l 50  Traceback (most recent call last):
  File "test.py", line 104, in <module>
    main(sys.argv[1:])
  File "test.py", line 99, in main
    f.write(u"\n    <role>{0}</role>".format(str(actor.Role).encode('ascii', 'ignore')))
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 1: ordinal not in range(128)

我该如何解决这个问题?我正在使用Python 2.7。

1 个答案:

答案 0 :(得分:1)

问题是你正在将一个unicode字符串传递给str()函数(在Python 2中,str是一个字节字符串)。如果你只是摆脱对str的调用它应该工作:

f.write(u"\n    <name>{0}</name>".format(actor.Name.encode('ascii', 'ignore')))
f.write(u"\n    <role>{0}</role>".format(actor.Role.encode('ascii', 'ignore')))

然后使用encode('ascii','ignore')将完全删除unicode字符。你可能想做这样的事情:

f.write(u"\n    <name>{0}</name>".format(actor.Name).encode('UTF-8'))
f.write(u"\n    <role>{0}</role>".format(actor.Role).encode('UTF-8'))