Frage

Ich versuche, PyObjC unter Mac OS X herauszufinden, und habe ein einfaches Programm geschrieben, um die Namen in meinem Adressbuch auszudrucken.Allerdings habe ich einige Probleme mit der Kodierung der Ausgabe.

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

Wenn ich dieses Programm ausführe, sieht die Ausgabe etwa so aus:

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

Könnte mir bitte jemand erklären, warum die Zeichenfolgen in Unicode vorliegen, der Inhalt aber so aussieht?

Mir ist auch aufgefallen, dass ich beim Versuch, den Namen auszudrucken, die Fehlermeldung erhalte

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

Lösung

Wenn Sie den Code in Ihrer Frage in der interaktiven Konsole ausführen, gibt der Interpreter aufgrund der letzten Anweisung der Schleife die Darstellung von „name“ aus.

Wenn Sie die letzte Zeile der Schleife von nur „name“ in „print name“ ändern, sollte die Ausgabe in Ordnung sein.Ich habe dies mit Terminal.app auf einem 10.5.7-System getestet.

Andere Tipps

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

wirkt sich nur auf die Art und Weise aus, wie Python Kommentare und String-Literale in Ihrer Quelle dekodiert. nicht die Art und Weise, wie die Standardausgabe konfiguriert ist usw. usw.Wenn Sie das Terminal Ihres Mac auf UTF-8 einstellen (Terminal, Einstellungen, Einstellungen, Erweitert, International-Dropdown) und Unicode-Text daran ausgeben, nachdem Sie ihn in UTF-8 codiert haben (print name.encode("utf-8")), sollte es dir gut gehen.

Schreiben Sie einfach den Variablennamen sends repr(name) zur Standardausgabe und repr() kodiert alle Unicode-Werte.

print versucht zu konvertieren u'Jacob \xc5berg' in ASCII, was nicht funktioniert.Versuchen Sie, es in eine Datei zu schreiben.

Sehen Druck schlägt im Python-Wiki fehl.

Das heißt, Sie verwenden älter, begrenzte oder falsch konfigurierte Konsole.Wenn Sie nur versuchen, mit Unicode bei interaktiven Eingabeaufforderung zu einer modernen Unicode-bewussten Konsole zu spielen.Die meisten modernen Python -Verteilungen sind mit Leerlauf ausgestattet, wo Sie alle Unicode -Zeichen drucken können.

Konvertieren Sie es in eine Unicode-Zeichenfolge durch:

print unicode(name)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top