Fehler bei Kompilierungssyntax: Nicht ASCII-Buchstaben in einer Zeichenfolge

8

Ich habe eine Python-Datei, die eine lange HTML-Kette enthält. Wenn ich & amp; Führen Sie diese Datei / dieses Skript aus Ich erhalte diesen Fehler:

%Vor%

Ich habe die Anweisungen befolgt und bin zu der vorgeschlagenen URL gegangen. Aber etwas wie das oben in meinem Skript zu setzen funktioniert immer noch nicht:

%Vor%

Was kann ich tun, um zu verhindern, dass dieser Compilerfehler auftritt?

    
Mack 31.05.2011, 05:22
quelle

7 Antworten

8

Um Probleme wie die in der Frage angegebene zu vermeiden, sollten Sie niemals andere Kodierungen als utf-8 für Python-Quellcode verwenden.

Dies ist die richtige Kopfzeile, um

zu verwenden %Vor%

Nun müssen Sie die Datei von der Kodierung, die Sie eventuell haben, in utf-8 umwandeln, wahrscheinlich ist Ihr aktueller Texteditor dazu in der Lage.

Wenn Sie sich fragen, warum ich dies sage, denken Sie daran, dass es für einen Texteditor unmöglich ist, Ihre Nicht-Unicode-Codierung sicher zu erraten, da es für Nicht-Unicode keine Stückliste gibt. Aus diesem Grund verwenden die meisten anständigen Editoren UTF-8 als Standard, selbst wenn die Kodierung nicht spezifiziert ist. Und übrigens, die Kodierung, die im Header der Python-Datei angegeben ist, ist nur für Python, die meisten Editoren ignorieren, was Sie dort geschrieben haben.

Wie Sie sehen können, versucht Python, ein Zeichen über 128 mit ASCII (nicht latin-1 ) zu dekodieren. Ich bin nicht sicher, warum das passiert, aber ich interessiere mich nicht allzu sehr, weil es einen viel besseren Weg gibt, das Problem zu lösen.

    
sorin 31.05.2011 06:58
quelle
3

Es muss sich am Anfang des Skripts befinden, das den Nicht-ASCII-Text enthält, und es muss mit der tatsächlichen Codierung der Datei übereinstimmen. \x92 ist CP1252, nicht Latin-1.

    
Ignacio Vazquez-Abrams 31.05.2011 05:30
quelle
3

Wenn Sie nur daran interessiert sind, diesen Fehler loszuwerden, ohne sich mit den Einzelheiten zu befassen (die Sie aus den anderen Antworten auf dieser Seite erhalten können), können Sie Folgendes tun:

1) Kopieren Sie Ihren Code und fügen Sie ihn in Notepad ++

ein

2) Wählen Sie Codierung - & gt; In UTF-8 kodieren

3) Wählen Sie Ansicht - & gt; Symbol anzeigen - & gt; Zeige alle Charaktere

Nun wäre es für dich sichtbar, welches Symbol das Problem verursacht (x92 wäre sichtbar). Ersetzen / Entfernen Sie es, um das Problem zu lösen.

    
theharshest 29.04.2012 03:35
quelle
2

Gefunden und hoffe, es ist hilfreich für die nächste Person: Ссылка

  

Codepunkt 0x92 (dezimal 146) ist das richtige einfache Anführungszeichen oder   Apostroph (') in Windows-1252. Es ist ein ungültiges Zeichen in ISO 8859   und in UTF-8, da der 0x80-0x9F-Bereich für die C1-Steuerung reserviert ist   Zeichen.

Ich bin mir nicht sicher, ob ich das Urheberrecht zerstören werde. Wenn ja, entfernen Sie bitte die Blockquote.

    
Garvin 04.01.2013 17:43
quelle
1

Die Kodierungsdeklaration zeigt an, dass Sie glauben, dass die Datei in der Latin-1-Kodierung ist, aber der Python-Interpreter findet ein Zeichen in oder nahe der Zeile 2509 in GlobalVars.py, was Sie nicht denken.

Sie sollten zuerst die Codierung von GlobalVars.py bestätigen. Ist es wirklich Latin-1?

Als nächstes sollten Sie die Zeichen in der Nähe von Zeile 2509 überprüfen. Sind sie auch lateinisch-1, oder wurden sie aus einer Webseite oder irgendwo anders ausgeschnitten und eingefügt (vielleicht sind dort UTF-8-Zeichen gemischt)?

Wenn Sie Zeichen in Ihrer Quelldatei haben, die nicht Ihrer Meinung nach sind, müssen Sie möglicherweise bereinigen Sie die Datei , bevor Sie weitermachen.

    
buruzaemon 31.05.2011 05:49
quelle
1

füge diese Zeilen über deinem Code hinzu

%Vor%     
rtnidumolu 14.06.2013 11:30
quelle
0

Eine einfache Umgehungslösung, wenn Ihre Datei wirklich in latin-1 ist, ist die HTML-Zeichenfolge mit ihrer Darstellung zu ändern.

Afaik:

%Vor%

Wenn dein Charakter nicht Æ ist, dann ist deine Datei nicht in latin-1 codiert ;-) (und du könntest überprüfen, ob utf-8 / cp1292 besser als schneller Gewinn funktioniert)

BEARBEITEN : Natürlich möchten Sie Ihre ACTUAL-Dateicodierung überprüfen, bevor Sie es versuchen. Ich könnte falsch sein, nicht 100% sicher, dass x92 ist in Iso8859-1: nach dieser Seite , es scheint nicht definiert.

    
Bruce 31.05.2011 05:30
quelle