2014-06-24 10 views
5
string = "Deepika Padukone, Esha Gupta or Yami Gautam - Who's looks hotter and sexier? Vote! - It's ... Deepika Padukone, Esha Gupta or Yami Gautam…. Deepika Padukone, Esha Gupta or Yami Gautam ... Tag: Deepika Padukone, Esha Gupta, Kalki Koechlin, Rang De Basanti, Soha Ali Khan, Yami ... Amitabh Bachchan and Deepika Padukone to be seen in Shoojit Sircar's Piku ..." 

fp = open("test.txt", "w+"); 

fp.write("%s" %string); 

dopo aver eseguito il codice sopra Ho il seguente errore.Come eliminare l'errore di codifica ascii in python

File "encode_error.py", line 1 

SyntaxError: Non-ASCII character '\xe2' in file encode_error.py on line 1, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details 
+2

Hai * letto il link fornito *? –

+0

Funziona bene per me ... – hd1

+0

@ hd1: Davvero? In un file sorgente, quindi esegui con Python 2? * Non limitarti a incollarlo in una sessione Python interattiva *. –

risposta

6

si ha un personaggio U+2026 HORIZONTAL ELLIPSIS nella definizione stringa:

... Deepika Padukone, Esha Gupta or Yami Gautam…. ... 
              ^

Python richiede che si dichiara la codifica del codice sorgente se si è di utilizzare caratteri non ASCII nell'origine.

Le opzioni disponibili sono:

  • dichiarare la codifica, come specified in the linked PEP 263. È un commento che deve essere la prima o la seconda riga del file sorgente.

    Ciò che viene impostato su dipende dall'editor di codice. Se stai salvando i file codificati come UTF-8, il commento è simile al seguente:

    # coding: utf-8 
    

    ma il formato è flessibile. Puoi anche scrivere lo encoding, ad esempio, e usare = invece di :.

  • Sostituire l'ellissi orizzontale con tre punti, come usato nel resto della stringa

  • Sostituire il codepoint con \xhh sequenze di escape per rappresentare i dati codificati. U + 2026 codificato in UTF-8 è \xe2\x80\xa6.
+0

come eseguire la codifica del codice sorgente nella mia fonte.Sono novizio di python – user3770743

+1

La stringa pubblicata sopra è stata presa da un oggetto JSON e ho bisogno di estrarre la stringa. Quindi potrebbe non essere possibile sostituire i puntini di sospensione con 3 punti. – user3770743

+0

@ user3770743: Perché non caricare i dati JSON da un file o una risposta HTTP con il modulo 'json', quindi? –

5

aggiungi # coding: utf-8 all'inizio del file.

# coding: utf-8 
string = "Deepika Padukone, Esha Gupta or Yami Gautam - Who's looks hotter and sexier? Vote! - It's ... Deepika Padukone, Esha Gupta or Yami Gautam…. Deepika Padukone$ 

fp = open("test.txt", "w+"); 

fp.write("%s" %string); 

Spiegazione:

L'errore è causato dalle sostituendo caratteri standard come apostrofo (‘) di caratteri non standard come virgolette (`) durante la copia. Succede abbastanza spesso quando si copia il testo da un file PDF. La differenza è molto sottile, ma per quanto riguarda Python c'è un'enorme differenza. L'apostrofo è completamente legale per indicare una stringa di testo, ma le virgolette non lo sono.

Tecnicamente, non è esattamente illegale utilizzare qualsiasi tipo di personaggio che vogliamo. È solo che dobbiamo dire a Python che tipo di codifica stiamo usando in modo che sappia cosa fare con questi caratteri non standard. L'aggiunta di # coding: utf-8 all'inizio di quel file dirà a python che la codifica è utf-8.

UTF-8 è un formato di codifica per rappresentare i caratteri nel set Unicode. È usato molto ampiamente sul web. Unicode è lo standard del settore per rappresentare e gestire il testo su molte piattaforme diverse tra cui il web, il software aziendale, la stampa, ecc. UTF-8 è uno dei metodi più usati per codificare questo set di caratteri.

+1

Solo se l'editor di testo dell'OP è impostato su UTF-8. –

+0

Certo, * ma deve essere esplicitamente detto *. Puoi anche creare un'ellissi orizzontale in altre codifiche. –

+1

sì, funziona bene se lo faccio. – user3770743