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)

  • Python: Umwandlung von ISO-8859-1 / latin1 nach UTF-8
  • URL mit nationalen Zeichen, die UnicodeEncodeError geben
  • Python, der die falsche Länge des Strings zurückgibt, wenn er Sonderzeichen verwendet
  • Wie öffnet man HTML-Datei?
  • Python, wie man 0x90 (\ x90) als macOS Roman Encoding zu \ xc3 \ xaa codiert
  • Kodierung einer Liste von Tupeln mit Python?
  • 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?

  • Python Subprocess zum Löschen der Reg-Taste unter Windows
  • Wie speichert man einen String, der sowohl ein einzelnes Zitat (') als auch ein doppeltes Zitat (") in python enthält
  • Warum erscheinen die Backslashs zweimal?
  • Wie benutzt man '\ Q' und '\ E' Regex Symbole in Python?
  • Einfachste Möglichkeit, Unicode-Darstellungen aus einer Zeichenfolge in Python 3 zu entfernen?
  • Warum benutzt PyCharm doppelten Backslash, um es zu entkommen?
  • 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.