PyObjC中的Unicode问题

时间:2009-05-28 18:51:33

标签: python macos unicode pyobjc

我想在Mac OS X上找出PyObjC,我写了一个简单的程序来打印我的地址簿中的名字。但是,我对输出的编码有些麻烦。

#! /usr/bin/env python
# -*- coding: UTF-8 -*-

from AddressBook import *

ab = ABAddressBook.sharedAddressBook()
people = ab.people()

for person in people:
    name = person.valueForProperty_("First") + ' ' + person.valueForProperty_("Last")
    name

当我运行这个程序时,输出看起来像这样:

...snip...
u'Jacob \xc5berg'
u'Fernando Gonzales'
...snip...

有人可以解释为什么字符串是unicode,但内容看起来像那样?

我还注意到,当我尝试打印名称时,我收到了错误

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

4 个答案:

答案 0 :(得分:2)

# -*- coding: UTF-8 -*-

仅影响Python解码源中的注释和字符串文字的方式,标准输出的配置方式等等。如果将Mac的终端设置为UTF-8(终端,首选项) ,设置,高级,国际下拉列表)并在以UTF-8(print name.encode("utf-8"))编码后向其发出Unicode文本,你应该没问题。

答案 1 :(得分:1)

如果您在交互式控制台中运行问题中的代码,则由于循环的最后一个语句,解释器将打印“name”的repr。

如果将循环的最后一行从“name”更改为“print name”,则输出应该没问题。我在10.5.7系统上用Terminal.app测试过这个。

答案 2 :(得分:0)

只需编写变量名称即可将repr(name)发送到标准输出,repr()对所有unicode值进行编码。

print尝试将u'Jacob \xc5berg'转换为ASCII,但这不起作用。尝试将其写入文件。

请参阅Print Fails on the python wiki

  

这意味着你正在使用遗产,   控制台有限或配置错误。如果   你只是想玩   交互式提示下的unicode转移到   一个现代的unicode感知控制台。最   现代Python发行版附带   IDLE,你可以打印所有   unicode characters。

答案 3 :(得分:0)

通过以下方式将其转换为unicode字符串:

print unicode(name)