2012-05-14 7 views
183

dire che ho una funzione:SyntaxError: carattere non-ASCII ' XA3' nel file quando la funzione restituisce '£'

def NewFunction(): 
    return '£' 

voglio stampare alcune cose con un cancelletto di fronte ad essa e stampa un errore quando provo a fare funzionare questo programma, viene visualizzato questo messaggio di errore:

SyntaxError: Non-ASCII character '\xa3' in file 'blah' but no encoding declared; 
see http://www.python.org/peps/pep-0263.html for details 

qualcuno può informare come posso includere un cancelletto nella mia funzione di ritorno? Fondamentalmente lo sto usando in una classe ed è all'interno della parte '__str__' che il cancelletto è incluso.

+27

Hai persino letto il PEP a cui ti sei collegato? Descrive qual è il problema e come risolverlo. – murgatroid99

+0

versione python? –

+1

"Qualcuno può informarmi su come posso includere un segno cancelletto nella mia funzione di ritorno." Bene, il messaggio di errore dice "vedi http://www.python.org/peps/pep-0263.html per i dettagli"; forse dovresti iniziare da lì? –

risposta

272

Consiglierei di leggere quel PEP che l'errore ti dà. Il problema è che il codice sta tentando di utilizzare la codifica ASCII, ma il simbolo della sterlina non è un carattere ASCII. Prova a utilizzare la codifica UTF-8. Puoi iniziare inserendo # -*- coding: utf-8 -*- nella parte superiore del tuo file .py. Per essere più avanzati, puoi anche definire le codifiche su una stringa per stringa nel codice. Tuttavia, se stai cercando di inserire letteralmente il cancelletto nel tuo codice, avrai bisogno di una codifica che lo supporti per l'intero file.

+2

Grazie, ho dimenticato di farlo da solo, ma nel mio caso funziona meglio per codificare in utf-8 senza BOM. –

+0

Grazie !!! Dopo 2 ore di ricerca ha finalmente funzionato .. Grazie mille –

41

Prima aggiungere la riga # -*- coding: utf-8 -*- all'inizio del file e quindi utilizzare u'foo' per tutto il vostro non-ASCII dati unicode:

def NewFunction(): 
    return u'£' 

o utilizzare la magia a disposizione dal Python 2.6 per renderlo automatico:

from __future__ import unicode_literals 
+10

Se tu avere '' # - * - coding: utf-8 - * - '' non è necessario anteporre le stringhe Unicode con '' u'' –

+0

+1 GRAZIE! u'foo 'era la risposta al mio problema. – Sabuncu

+0

GRAZIE per avermi salvato così tanto tempo! –

217

l'aggiunta della linea due seguenti seduti nella parte superiore del mio script .py lavorato per me (prima linea era necessario):

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

Grazie funzionano come un fascino .. –

+0

Grazie per questo. È super strano perché non ho mai dovuto farlo prima. Sento che qualcosa non funziona con le impostazioni di codifica del mio Mac. Non avevo questo problema in onda ma il mio nuovo professionista ha questo problema. – anon58192932

+0

Ho lo stesso problema e il mio Python è 2.7.11.Dopo aver aggiunto la seconda riga '# - * - coding: utf-8 - * -' all'inizio del file, ha risolto il problema. – hailong

Problemi correlati