Ersetzen Sie ein seltsames Anführungszeichen (') durch eine leere Zeichenfolge in Python

8

Ich versuche, string.replace('’','') zu verwenden, um den gefürchteten komischen Anführungsstrich zu ersetzen: '(aka \ xe2 aka # 8217). Aber wenn ich diese Codezeile ausführe, bekomme ich diesen Fehler:

%Vor%

BEARBEITEN : Ich erhalte diesen Fehler, wenn ich versuche, Zeichen in einer extern erhaltenen CSV-Datei zu ersetzen.

%Vor%

Selbst nachdem der obige Code ausgeführt wurde, ist das unerwünschte Zeichen immer noch im Druckergebnis vorhanden. Ich habe die Vorschläge in den folgenden Antworten auch ausprobiert. Ziemlich sicher, dass es ein Codierungsproblem ist, aber ich weiß einfach nicht, wie man es repariert, also wird jede mögliche Hilfe sehr geschätzt.

    
Gady 13.09.2011, 01:13
quelle

5 Antworten

11

Das Problem hier ist mit der Kodierung der heruntergeladenen Datei ( aa_meetings.csv ). Der Server deklariert keine Codierung in seinen HTTP-Headern, aber das einzige Nicht-ASCII 1 -Okt in der Datei hat den Wert 0x92. Sie sagen, dass dies "der gefürchtete seltsame Anführungsstrich" sein soll, daher ist die Kodierung der Datei windows-1252 . Sie versuchen jedoch, nach der UTF-8-Codierung von U + 2019 zu suchen und diese zu ersetzen, d. H.% Co_de%, die nicht in der Datei enthalten ist.

Dies zu beheben ist so einfach wie das Hinzufügen von entsprechenden Aufrufen zu '\xe2\x80\x99' und encode :

%Vor%

1 mit "ASCII" meine ich "die Zeichenkodierung, die einzelne Oktette mit den Werten 0x00 bis 0x7F direkt auf U + 0000 bis U + 007F abbildet und die Bedeutung von Oktetten mit Werten nicht definiert 0x80 bis 0xFF ".

    
zwol 13.09.2011, 04:03
quelle
8

Sie müssen die Codierung Ihrer Quelldatei deklarieren. Setzen Sie dies als eine der ersten beiden Zeilen Ihres Codes:

%Vor%

Wenn Sie eine andere Kodierung als UTF-8 verwenden (zum Beispiel Latin-1), müssen Sie diese stattdessen einfügen.

    
Roberto Bonvallet 13.09.2011 01:16
quelle
2

Sie können string.replace('\xe2', "'") verwenden, um sie durch das normale einfache Anführungszeichen zu ersetzen.

    
Ethan Furman 13.09.2011 01:34
quelle
2

Diese Datei ist in Windows-1252 codiert. Der Apostroph U+2019 kodiert für \x92 in dieser Kodierung. Die richtige Sache ist, die Datei zur Verarbeitung in Unicode zu dekodieren:

%Vor%

Das Problem war, dass Sie nach einem UTF-8-codierten U+2019 gesucht haben, d. h. \xe2\x80\x99 , das nicht in der Datei enthalten war. Konvertieren in Unicode löst dies.

Die Verwendung von Unicode-Literalen wie hier ist eine einfache Möglichkeit, diesen Fehler zu vermeiden. Sie können das Zeichen jedoch direkt codieren, wenn Sie es als u'’' :

schreiben %Vor%     
Josh Lee 13.09.2011 04:02
quelle
0

Ich habe solche Non-ASCII character '\xe2' -Fehler wiederholt mit meinen Python-Skripten bekommen, obwohl die einfachen Anführungszeichen ersetzt wurden. Es stellt sich heraus, das Nicht-ASCII-Zeichen war wirklich ein doppelter Bindestrich (-) . Ich ersetzte es durch einen regulären Doppelstrich (-) und das reparierte es. [Beide werden auf den meisten Bildschirmen gleich aussehen. Abhängig von Ihren Schrifteinstellungen könnte die problematische Version etwas länger aussehen.]

Für alle, die in ihren Python-Skripten dasselbe Problem haben (in ihren Codezeilen, nicht in den von Ihrem Skript geladenen Daten):

Option 1: Entfernen Sie den problematischen Charakter

  • Geben Sie die Zeile erneut manuell ein. (Um sicherzustellen, dass das problematische Zeichen nicht versehentlich kopiert und eingefügt wurde.)
  • Beachten Sie, dass das Kommentieren der Zeile nicht funktioniert.
  • Überprüfen Sie, ob der problematische Charakter wirklich der ist, den Sie denken.

Option 2: Ändern Sie die Codierung

Deklarieren Sie eine Codierung am Anfang des Skripts, wie Roberto darauf hingewiesen hat:

%Vor%

Hoffe das hilft jemandem.

    
Fabien Snauwaert 01.04.2014 07:52
quelle

Tags und Links