Python Character Encoding Europäische Akzente

Ich weiß, das ist kein ungewöhnliches Problem und es gibt schon mehrere SO Fragen, die hier beantwortet werden ( 1 , 2 , 3 ), aber auch nach den Empfehlungen gibt es noch diesen Fehler (für den untenstehenden Code):

uri_name = u"%s_%s" % (name[1].encode('utf-8').strip(), name[0].encode('utf-8').strip()) UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 4: ordinal not in range(128)

  • Zeichenerkennung in einer Textdatei in Python mit dem Universal Encoding Detector (Chardet)
  • Beste Weg, um unbekannte Unicoding-Codierung in Python 2.5 zu dekodieren
  • Wie öffnet man HTML-Datei?
  • URL mit nationalen Zeichen, die UnicodeEncodeError geben
  • Zuverlässige Handhabung von Nicht-ASCII-Zeichen in Python?
  • UnicodeEncodeError: 'ascii' codec kann das Zeichen nicht u '\ xa3'
  • Also versuche ich, eine URL aus einer Liste von Künstlernamen zu bekommen, von denen viele Akzente und europäische Charaktere haben (mit ihren Namen auch mit den Sonderzeichen über repr gedruckt):

     Auberjonois, René -> Auberjonois, Ren\xc3\xa9 Bäumer, Eduard -> B\xc3\xa4umer, Eduard Baur-Nütten, Gisela -> Baur-N\xc3\xbctten, Gisela Bösken, Lorenz -> B\xc3\xb6sken, Lorenz Čapek, Josef -> \xc4\x8capek, Josef Großmann, Rudolf -> Gro\xc3\x9fmann, Rudolf 

    Der Block, den ich versuche zu laufen, ist:

     def create_uri(artist_name): artist_name = artist_name name = artist_name.split(",") uri_name = u"%s_%s" % (name[1].encode('utf-8').strip(), name[0].encode('utf-8').strip()) uri = 'http://example.com/' + uri_name print uri create_uri('Name, Non_Accent') create_uri('Auberjonois, René') 

    So das erste funktioniert und produziert http://example.com/Non_Accent_Name Aber die zweite scheitert mit dem Fehler oben.

    Ich habe # coding=utf-8 an die Spitze meines Skripts hinzugefügt und habe versucht, die artist_name String an jedem Punkt auf dem Weg zu kodieren, nur um den gleichen Fehler jedes Mal zu bekommen.

    Wenn es darauf ankommt, benutze ich Atom als Texteditor und wenn ich die .csv-Datei öffne, von wo aus diese Namen kommen, werden die Akzente alle korrekt angezeigt.

    Was kann ich noch tun, um sicherzustellen, dass das Skript UTF-8 als UTF-8 interpretiert und nicht ascii?

  • Warum erscheinen die Backslashs zweimal?
  • Python "string_escape" vs "unicode_escape"
  • Wie speichert man einen String, der sowohl ein einzelnes Zitat (') als auch ein doppeltes Zitat (") in python enthält
  • Wie entkomme ich einem Backslash-Escaped String in Python?
  • Wie ignoriere ich die Escaping \ Python-Liste?
  • Wie man einzelne Anführungszeichen in Python auf dem Server entschlüsselt, um in Javascript auf Client verwendet zu werden
  • 2 Solutions collect form web for “Python Character Encoding Europäische Akzente”

    Stoppen Sie mit UTF-8. Benutze unicode s überall und dekodiere / kodiere (ggf.) an Schnittstellen.

     def create_uri(artist_name): name = artist_name.split(u",") uri_name = u"%s_%s" % (name[1].strip(), name[0].strip()) uri = u'http://example.com/' + uri_name print uri create_uri(u'Name, Non_Accent') create_uri(u'Auberjonois, René') 

    Wie ich bei print-Anweisung sehen kann, benutzt man python 2.x. Das heißt, du solltest Unicode-Zeichen über \u Notation definieren oder ein u Präfix für String verwenden. Also, ändern Sie einfach Ihre Linie zu

     create_uri(u'Auberjonois, René') # note the u'' 

    Auch sieht es so aus, als hättest du keinen .encode für deine Teile nach dem Splitten – es ist schon Unicode

    Python ist die beste Programmiersprache der Welt.