Python PyObjC中的Unicode问题
我试图在MacOSX上找出PyObjC,我已经编写了一个简单的程序来打印地址簿中的姓名。但是,我在输出的编码方面遇到了一些问题Python PyObjC中的Unicode问题,python,macos,unicode,pyobjc,Python,Macos,Unicode,Pyobjc,我试图在MacOSX上找出PyObjC,我已经编写了一个简单的程序来打印地址簿中的姓名。但是,我在输出的编码方面遇到了一些问题 #! /usr/bin/env python # -*- coding: UTF-8 -*- from AddressBook import * ab = ABAddressBook.sharedAddressBook() people = ab.people() for person in people: name = person.valueForPr
#! /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)
只需写入变量名即可将
repr(name)
发送到标准输出,并且repr()
对所有unicode值进行编码
print
尝试将u'Jacob\xc5berg'
转换为ASCII,但这不起作用。尝试将其写入文件
看
这意味着你在使用legacy,
控制台有限或配置错误。如果
你只是想和我玩
unicode在交互式提示下移动到
支持unicode的现代控制台。最
现代Python发行版附带
空闲,您可以打印所有
unicode字符
如果您将Mac终端设置为UTF-8(终端、首选项、设置、高级、国际下拉列表),并在UTF-8(
print name.encode(“UTF-8”)编码后向其发送Unicode文本,则仅影响Python解码源代码中的注释和字符串文本的方式,而不影响标准输出的配置方式等)
),您应该没事。通过以下方式将其转换为unicode字符串:
print unicode(name)
如果您在交互控制台中运行问题中的代码,由于循环的最后一条语句,解释器将打印“name”的repr
如果将循环的最后一行从“name”更改为“print name”,则输出应该可以。我已经在10.5.7系统上使用Terminal.app对此进行了测试 正如u'Fernando Gonzales所看到的,它已经是一个unicode字符串了。也许,是的,但这确实解决了问题。我也不知道为什么,我对Python的字符串处理还不够深入。
print unicode(name)