3

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...

文字列がユニコードである理由を誰かが説明してもらえますか?しかし、内容はそのように見えますか?

また、名前を印刷しようとするとエラーが発生することにも気付きました

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

4 に答える 4

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

Python がソース内のコメントと文字列リテラルをデコードする方法にのみ影響し、標準出力が構成されている方法などには影響しません。Mac のターミナルを UTF-8 (ターミナル、設定、設定、詳細設定、インターナショナル ドロップダウン) に設定して出力すると、 UTF-8 ( print name.encode("utf-8")) でエンコードした後に Unicode テキストに変換すると、問題ないはずです。

于 2009-05-28T19:02:45.893 に答える
1

インタラクティブコンソールで質問のコードを実行すると、ループの最後のステートメントが原因で、インタプリタは「name」のreprを出力します。

ループの最後の行を「name」から「printname」に変更すると、出力は正常になります。10.5.7システムのTerminal.appでこれをテストしました。

于 2009-05-29T06:12:33.033 に答える
0

変数名を書き込むだけrepr(name)で、標準出力に送信され、repr()すべての unicode 値がエンコードされます。

printASCIIに変換しようとしu'Jacob \xc5berg'ますが、うまくいきません。ファイルに書き込んでみてください。

python wiki の Print Fails を参照してください。

これは、レガシー、制限付き、または構成が不適切なコンソールを使用していることを意味します。インタラクティブなプロンプトで Unicode をいじりたいだけの場合は、最新の Unicode 対応コンソールに移動してください。最新の Python ディストリビューションのほとんどには、すべての Unicode 文字を出力できる IDLE が付属しています。

于 2009-05-28T18:56:54.237 に答える
0

次の方法でユニコード文字列に変換します。

print unicode(name)
于 2009-05-28T19:08:02.903 に答える