Domanda

Qualsiasi pensiero sul perché questo non sta funzionando? Ho davvero pensato 'ignora' avrebbe fatto la cosa giusta.

>>> 'add \x93Monitoring\x93 to list '.encode('latin-1','ignore')
Traceback (most recent call last):
  File "<interactive input>", line 1, in ?
UnicodeDecodeError: 'ascii' codec can't decode byte 0x93 in position 4: ordinal not in range(128)
È stato utile?

Soluzione

... c'è un motivo si chiamano "codifiche" ...

Un po 'di preambolo: si pensi unicode come la norma, o lo stato ideale. Unicode è solo una tabella di caratteri. №65 è latino capitale A. №937 è greca omega capitale. Solo che.

Al fine di un computer per memorizzare e manipolare, o Unicode, che ha da encode in byte. Il più semplice encoding di Unicode è UCS-4; ogni personaggio occupa 4 byte, e tutti i ~ 1000000 personaggi sono disponibili. 4 byte contengono il numero del carattere nelle tabelle Unicode come un intero di 4 byte. Un'altra codifica molto utile è UTF-8, che può codificare qualsiasi carattere Unicode con uno a quattro byte. Ma ci sono anche alcune codifiche limitate, come "latin1", che comprendono una gamma molto limitato di caratteri, in gran parte utilizzato dai paesi occidentali. Tali codifiche utilizzare solo un byte per carattere.

Fondamentalmente, Unicode può essere codificati con molte codifiche e stringhe codificate possono essere decodificato per Unicode. Il fatto è che Unicode è venuto molto tardi, così tutti noi che è cresciuta con un 8-bit set di caratteri imparato troppo tardi che per tutto questo tempo abbiamo lavorato con codificati stringhe. La codifica potrebbe essere ISO8859-1, o le finestre CP437, CP850 o, o, o, o, a seconda del nostro di default del sistema.

Così, quando, nel codice sorgente, si immette la stringa "aggiungere‘Monitoraggio’alla lista" (e credo che si voleva la stringa "ADD‘Monitoraggio’alla lista", nota la seconda citazione), in realtà sono utilizzando già una stringa codificato in base alla tabella codici predefinita del sistema (per il byte \ x93 presumo si utilizza Windows tabella codici 1252, “occidentale”). Se si desidera ottenere Unicode da quella, è necessario decodifica la stringa dalla codifica "CP1252".

Allora, che cosa si intende fare, era:

"add \x93Monitoring\x94 to list".decode("cp1252", "ignore")

E 'un peccato che Python 2.x include un metodo .encode per le stringhe troppo; si tratta di una funzione di convenienza per codifiche "speciali", come la "zip" o "rot13" o "base64" quelli che non hanno nulla a che fare con Unicode.

In ogni caso, tutto ciò che dovete ricordare per i vostri to-and-fro conversioni Unicode è:

  • una stringa Unicode ottiene codificati in una stringa Python 2.x (in realtà, una sequenza di byte)
  • una stringa Python 2.x ottiene decodificato in una stringa Unicode

In entrambi i casi, è necessario specificare il encoding che verrà utilizzato.

io non sono molto chiare, ho sonno, ma spero davvero che io aiuto.

PS Un divertente nota a margine: Maya non ha avuto Unicode; antichi romani, antichi Greci, antichi egizi no troppo. Tutti hanno avuto i loro propri "codifiche" ed ha avuto poco o nessun rispetto per le altre culture. Tutte queste civiltà sbriciolato in polvere. Pensateci gente! Fai la tua app Unicode-aware, per il bene dell'umanità. :)

PS2 Si prega di non rovinare il messaggio precedente dicendo "Ma i cinesi ...". Se ti senti inclinato o obbligati a farlo, però, ritardare pensando che l'Unicode BMP è popolato per lo più da ideogrammi cinesi, ergo cinese è la base di Unicode. Posso andare avanti inventando bugie oltraggiose, fino a quando le persone a sviluppare applicazioni Unicode-aware. Cheers!

Altri suggerimenti

codifica è disponibile per stringhe Unicode, ma la stringa che hai lì non sembra unicode (provate con u'add \ x93Monitoring \ x93 alla lista ')

>>> u'add \x93Monitoring\x93 to list '.encode('latin-1','ignore')
'add \x93Monitoring\x93 to list '

Questo sembra funzionare:

'add \x93Monitoring\x93 to list '.decode('latin-1').encode('latin-1')

Eventuali problemi con questo? Mi chiedo quando 'ignora', 'sostituire' e altri come la gestione degli errori di codifica è disponibile in?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top