我想在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)
答案 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)