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)

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?

  • MySQL "falscher Stringwert" -Fehler beim Speichern von Unicode-String in Django
  • Was ist der richtige reguläre Ausdruck, um alle utf-8 / unicode Kleinbuchstaben Formulare entsprechen
  • Wie gebe ich den arabischen Text in meinen Python-Code ein?
  • Mit pyodbc auf Linux, um Unicode oder utf-8 Zeichen in einem nvarchar mssql Feld einzufügen
  • Python-Codierung - Konnte nicht zu utf8 decodieren
  • Ist 'encoding ist ein ungültiges keyword' fehler unvermeidlich in python 2.x?
  • Python-Regex gegen Latein-1-Zeichen-Codierung?
  • Kann nicht scrapy / verdreht 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.