2011-05-31 7 views
8

Ho un file python che contiene una lunga stringa di codice HTML. Quando compilo & eseguire questo file/script ottengo questo errore:Errore di sintassi della compilazione: lettere non ASCII in una stringa

_SyntaxError: Non-ASCII character '\x92' in file C:\Users...\GlobalVars.py on line 2509, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details_ 

Ho seguito le istruzioni ed era andato a l'url suggerito. Ma mettere qualcosa di simile nella parte superiore del mio script ancora non funziona:

#!/usr/bin/python 
# -*- coding: latin-1 -*- 

Cosa pensi che io possa fare per fermare questo errore di compilazione da verificano?

+0

forse si dovrebbe usare la codifica UTF-(al posto del latino) ...? – phynfo

risposta

0

Una soluzione semplice soluzione se il file è veramente in latino-1 è quello di modificare la stringa html con la sua rappresentazione.

AFAIK:

\x92 => 146 in decimal => Æ => Æ 

Se il tuo personaggio non è Æ, allora il file non è codificato in latin-1 ;-) (e si potrebbe desiderare di controllare se utf-8/cp1292 funziona meglio come un veloce win)

EDIT: Ovviamente, si desidera verificare la codifica del file ACTUAL prima di provare. Potrei sbagliarmi, non sicuro al 100% \ x92 è Æ in Iso8859-1: secondo questo page, non sembra definito.

3

Deve essere nella parte superiore dello script che contiene il testo non ASCII e deve corrispondere alla codifica effettiva del file. \x92 è CP1252, non Latin-1.

1

La dichiarazione di codifica indica che si pensa che il file sia in codifica latin-1, ma l'interprete python sta trovando che un char in o molto vicino alla riga 2509 in GlobalVars.py non è ciò che si pensa sia.

È necessario prima confermare la codifica di GlobalVars.py. È davvero latino-1?

Successivamente, dovresti controllare i caratteri vicino alla riga 2509. Sono anch'essi latin-1, oppure sono stati tagliati e incollati da una pagina Web o da qualche altra parte (forse ci sono i caratteri UTF-8 confusi lì)?

Se nel file di origine i caratteri non sono quelli che si pensa di essere, è possibile che sia necessario clean up the file prima di procedere ulteriormente.

8

Innanzitutto, per evitare problemi come quello specificato nella domanda, non è necessario utilizzare altra codifica di utf-8 per il codice sorgente Python.

Questa è l'intestazione corretta da utilizzare

#! /usr/bin/env python 
# -*- coding: utf-8 -*- 

Ora è necessario convertire il file da qualsiasi codifica potrebbe essere necessario utf-8, probabilmente il vostro editor di testo attuale è in grado di farlo.

Se ti chiedi perché dico questo, ricorda che è impossibile per un editor di testo indovinare in modo sicuro la codifica non Unicode perché non esiste BOM per non Unicode. Per questo motivo gli editor più decenti utilizzano l'UTF-8 come predefinito anche quando la codifica non è specificata. E BTW, la codifica specificata nell'intestazione del file python è solo per Python, la maggior parte degli editor ignora ciò che hai scritto lì.

Inoltre, come potete vedere, Python sta cercando di decodificare un carattere sopra 128 usando ASCII (non latin-1), questo dovrebbe fallire. Non sono sicuro del motivo per cui ciò accada, ma non mi interessa troppo perché esiste un modo molto migliore per risolvere il problema.

3

Se sono solo preoccupati per sbarazzarsi di questo errore, senza entrare nei dettagli di esso (che si possono ottenere da altre risposte in questa pagina), è possibile effettuare le seguenti operazioni -

1) copia la tua codice e incollarlo in Blocco note ++

2) Selezionare Encoding -> Codifica in UTF-8

3) Selezionare Visualizza -> Mostra simbolo -> Mostra tutti i personaggi

Ora sarebbe visibile a voi che quale simbolo sta causando il problema (x92 lo farebbe essere visibile). Sostituisci/Rimuovi per risolvere il problema.

2

trovato questo e spero che sia utile alla persona successiva: http://www.sitepoint.com/forums/showthread.php?567734-Anyone-know-what-this-error-means

Code point 0x92 (146 decimal) is the right single quotation mark, or apostrophe (’) in Windows-1252. It's an invalid character in ISO 8859 and in UTF-8, since the 0x80-0x9F range is reserved for C1 control characters.

Non sono sicuro se sto busting diritto d'autore. Se è così, ti preghiamo di rimuovere il blockquote.

+0

Ho ricevuto lo stesso errore quando ho copiato del testo da python.org come commento nel mio codice. Il testo aveva un apostrofo (non una versione di Windows) che stava causando questo. Ho cancellato l'apostrofo e ho usato la versione di Windows di esso. L'errore è andato via. – user3885927

1

aggiungere queste righe sulla parte superiore del vostro codice

#! /usr/bin/env python 
# -*- coding: utf-8 -*- 
Problemi correlati