2009-05-28 38 views
3

我想弄清楚Mac OS X上的PyObjC,並且我寫了一個簡單的程序來打印出我的地址簿中的名字。但是,我在輸出的編碼方面遇到了一些麻煩。PyObjC中的Unicode問題

#! /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) 

回答

1

如果運行在交互式控制檯你的問題的代碼解釋器將打印,因爲循環的最後一條語句的「名字」的再版。

如果將循環的最後一行從「name」更改爲「print name」,則輸出應該沒問題。我已經在10.5.7系統上用Terminal.app測試過了。

0

只是寫在變量名發送repr(name)到標準輸出和repr()編碼所有的Unicode值。

print試圖將u'Jacob \xc5berg'轉換爲ASCII,這不起作用。嘗試將其寫入文件。

請參閱Print Fails on the python wiki

這意味着您正在使用傳統的 控制檯有限或配置錯誤。如果 你只是想與 unicode玩在互動提示移動到 一個現代的unicode感知控制檯。大多數 現代Python發行版隨附 IDLE,您將能夠打印所有 unicode字符。

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

隻影響的Python解碼你的源代碼註釋和字符串的方式,標準輸出的配置方式,等等,等等。如果你設置你的Mac的終端爲UTF-8(終端,首選項,設置,高級,國際下拉菜單),並以UTF-8(print name.encode("utf-8"))編碼後發送Unicode文本,則應該沒問題。

0

將其轉換爲Unicode字符串通過:

print unicode(name) 
+0

它已經是一個unicode字符串,可以看到u'Fernando Gonzales'。 – 2009-05-28 19:11:54

+0

也許,是的,但是這*確實解決了問題。我不確定爲什麼,我對Python的字符串處理還不夠深入。 – 2009-05-29 09:29:09