2017-05-15 2 views
0

Ich habe Probleme mit Codierung in Python zu tun haben:Print Sonderzeichen aus utf-8 kodierten String

ich einige Saiten aus einer CSV bekommen, dass ich pandas.read_csv öffnen() verwenden, werden sie in Unicode codiert, so ich kodieren es utf-8

# data is from my csv 
string = data.encode('utf-8') 
print string 

jedoch die folgende tun, wenn ich es drucken, i

"Parc d'Activit\xc3\xa9s des Gravanches" 

bekommen und ich möchte

zurückzukehren
"Parc d'Activités des Gravanches" 

Es scheint wie ein einfaches Problem, aber ich bin ziemlich neu zu Python und fand nichts nah genug zu meinem Problem.

Hinweis: Ich verwende Python 2.7 und meine Datei beginnt mit

#!/usr/bin/env python2.7 
# coding: utf8 
+0

Add '# - * - Codierung: utf-8 - * - 'am Anfang des Codes und versuchen Sie es erneut – Nuageux

+0

@Nuageux das wird nicht alles lösen - es sagt nur Python, wie String-Litterals mit dem Modul zu behandeln. –

+0

Ich habe bereits '# Codierung: utf8' , die funktioniert auf die gleiche, ich mit versucht STIL - * - aber es änderte sich nichts – arnino

Antwort

0

EDIT: Ich sage nur, dass Sie Python 2 verwenden, okay, ich glaube, die Antwort unten aber immer noch wertvoll ist.

In Python 2 ist dies noch komplizierter und inkonsistent. Hier haben Sie str und unicode, und der Standard str unterstützt keine Unicode-Sachen.

Anyways, ist die Situation mehr oder weniger das gleiche ist, verwenden decode statt encodestr-unicode zu konvertieren. Das sollte es beheben.

Mehr Infos unter: https://pythonhosted.org/kitchen/unicode-frustrations.html


Dies ist eine häufige Quelle von confusion.The Problem ist ein wenig komplex, aber ich werde versuchen, es zu vereinfachen. Ich spreche über Python 3 hier, ich glaube, es gibt einige Unterschiede mit Python 2.

Es gibt zwei Arten von, was Sie eine Zeichenfolge nennen würden: str und bytes.

str ist der allgemeine Zeichenfolientyp Python, es unterstützt Unicode nahtlos in Python 3, aber die Art, wie es die eigentlichen Daten codiert, ist nicht relevant, es ist ein Objekt.

bytes ist ein Byte-Array, wie char* in C. Es ist eine Sequenz von Bytes.

Zeichenketten können auf beide Arten dargestellt werden, aber Sie müssen einen Codierungsstandard angeben, der zwischen den beiden übersetzt werden soll, da bytes interpretiert werden muss, da es sich wiederum um ein unformatiertes Array von Bytes handelt.

encode konvertiert eine str in bytes, das ist der Fehler, den Sie machen. Natürlich, wenn Sie bytes drucken, zeigt es nur seine Rohdaten, AKA, die Zeichenfolge codiert als utf-8.

decode tut die umgekehrte Operation, die möglicherweise das ist, was Sie brauchen.

Wenn Sie jedoch die Datei normalerweise (open(file_name, 'r')) öffnen, anstatt in Byte-Modus (open(file_name, 'b'), die ich bezweifle, dass Sie tun, sollten Sie nichts tun müssen, data Druck sollte gerade arbeiten, wie Sie es wollen .

Mehr Infos unter: https://docs.python.org/3/howto/unicode.html

+0

Kennen Sie den Namen des übergebenen Arguments, damit ich im Dokument nachsehen kann, ob ich das auf pandas.read_csv() anwenden kann? Ich denke an Dinge wie ''index ='' oder ''header ='' Ich habe gerade herausgefunden, dass einmal an meinen Datenrahmen übergeben, wird es richtig gedruckt, wenn ich es aus dem Datenrahmen drucken, was ist Ich möchte es am Ende machen, also ist es für mich kein Problem mehr, aber ich wäre neugierig, das herauszufinden. – arnino

+0

Es ist 'mode' https://docs.python.org/3.6/library/functions.html#open. – Oersted

+0

Auch wenn das Problem gelöst ist, könnte es interessant sein, wenn Sie die Gelegenheit nutzen würden, es zu lernen. Ich habe meinen Beitrag mit Python 2 Info bearbeitet. – Oersted

Verwandte Themen