comprensione dello schema di codifica in python 3

3

Ho ricevuto questo errore nel mio programma che acquisisce i dati da un sito Web diverso e li scrivo in un file:

'charmap' codec can't encode characters in position 151618-151624: character maps to <undefined>

Non ho familiarità con tutto ciò che decodifica la codifica e sono stato d'accordo con ciò che Python 2 ha fatto. Anche se il pitone ha dichiarato ufficialmente di aver apportato il cambiamento per rendere le cose migliori, sembra peggiorare.

Non ho idea di come correggere questi errori. Tuttavia sono una persona proattiva, quindi mi piacerebbe davvero sapere qual è la causa del problema e come risolverlo. Ho controllato il sito ufficiale ma le parole sono difficili da capire.

Potrei avere una semplice elaborazione su questo? Anche un'altra pagina è accettabile.

EDIT: Ho controllato questa pagina , l'Unicode HOWTO in Python 2.7. La mia comprensione è che dobbiamo tradurre la stringa unicode in formato binario mentre la scriviamo su file e richiede una codifica. Ovviamente 'utf-8' è il migliore, ma perché non ha forzato l'interprete python ad usare 'utf-8'? Invece, usa alcuni codec strani come "charmap" e "cp950" e "latin-1".

    
posta lamwaiman1988 26.07.2012 - 11:56
fonte

1 risposta

4

Vedi il wiki di Python sull'argomento . Stai provando a codificare una stringa unicode (il tipo di stringa predefinito in Python 3) con una codifica che non supporta alcuni dei caratteri nella tua stringa.

>>> '\u0411'.encode("iso-8859-15")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/encodings/iso8859_15.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_table)
UnicodeEncodeError: 'charmap' codec can't encode character '\u0411' in position 0: character maps to <undefined>
>>> '\u0411\u0411\u0411\u0411\u0411'.encode("iso-8859-15")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/encodings/iso8859_15.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_table)
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-4: character maps to <undefined>

Come puoi vedere, alcune codifiche utilizzano internamente una mappa dei caratteri e rilevano errori di codifica per più caratteri contemporaneamente.

Dovrai restringerlo fino ai punti di codice esatti ( characters in position 151618-151624 ) e usare la codifica.

    
risposta data 26.07.2012 - 12:34
fonte

Leggi altre domande sui tag