pyplot - title matplotlib python




Qual è la differenza tra codificare/decodificare? (5)

Ci sono alcune codifiche che possono essere usate per de- / encode da str a str o da unicode a unicode. Ad esempio base64, hex o anche rot13. Sono elencati nel modulo dei codec .

Modificare:

Il messaggio di decodifica su una stringa unicode può annullare l'operazione di codifica corrispondente:

In [1]: u'0a'.decode('hex')
Out[1]: '\n'

Il tipo restituito è str invece di unicode che è sfortunato secondo me. Ma quando non si fa un en / decode appropriato tra str e unicode, questo sembra comunque un pasticcio.

Non sono mai stato sicuro di capire la differenza tra la codifica str / unicode e la codifica.

So che str().decode() è per quando si ha una stringa di byte che si sa ha una certa codifica di caratteri, dato che il nome di codifica restituirà una stringa unicode.

So che unicode().encode() converte i caratteri unicode in una stringa di byte in base a un determinato nome di codifica.

Ma non capisco per cosa sono str().encode() e unicode().decode() . Qualcuno può spiegare, e forse anche correggere qualcos'altro che ho sbagliato sopra?

MODIFICARE:

Diverse risposte forniscono informazioni su cosa fa .encode su una stringa, ma nessuno sembra sapere cosa fa .decode per unicode.



La semplice risposta è che sono l'esatto opposto l'uno dell'altro.

Usiamo un esempio per illustrare:

il computer usa l'unità di byte di base per archiviare ed elaborare le informazioni, non ha senso per gli occhi umani.

ad esempio, '\ xe4 \ xb8 \ xad \ xe6 \ x96 \ x87' è la rappresentazione di due caratteri cinesi, ma il computer conosce solo (significato stampa o archivio) è Caratteri cinesi quando viene fornito un dizionario per cercarlo Parola cinese, in questo caso, è il dizionario "utf-8" e non visualizzerebbe correttamente la parola cinese desiderata se si guarda in un dizionario diverso o sbagliato (utilizzando un metodo di decodifica diverso).

Nel caso precedente, il processo per cui un computer cerca la parola cinese è decodifica ().

E il processo del computer che scrive il cinese nella memoria del computer è codificato ().

quindi le informazioni di codifica sono i byte non elaborati e le informazioni decodificate sono i byte non elaborati e il nome del dizionario a cui fare riferimento (ma non il dizionario stesso).


Per rappresentare una stringa unicode come una stringa di byte è nota come codifica . Usa u'...'.encode(encoding) .

Esempio:

    >>> u'æøå'.encode('utf8')
    '\xc3\x83\xc2\xa6\xc3\x83\xc2\xb8\xc3\x83\xc2\xa5'
    >>> u'æøå'.encode('latin1')
    '\xc3\xa6\xc3\xb8\xc3\xa5'
    >>> u'æøå'.encode('ascii')
    UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: 
    ordinal not in range(128)

In genere, codifica una stringa Unicode ogni volta che è necessario utilizzarla per l'IO, ad esempio trasferirla sulla rete o salvarla in un file su disco.

Per convertire una stringa di byte in una stringa unicode è noto come decodifica . Usa unicode('...', encoding) o '...'. Decodifica (codifica).

Esempio:

   >>> u'æøå'
   u'\xc3\xa6\xc3\xb8\xc3\xa5' # the interpreter prints the unicode object like so
   >>> unicode('\xc3\xa6\xc3\xb8\xc3\xa5', 'latin1')
   u'\xc3\xa6\xc3\xb8\xc3\xa5'
   >>> '\xc3\xa6\xc3\xb8\xc3\xa5'.decode('latin1')
   u'\xc3\xa6\xc3\xb8\xc3\xa5'

Normalmente decodificare una stringa di byte ogni volta che si ricevono dati di stringa dalla rete o da un file su disco.

Credo che ci siano alcune modifiche nella gestione Unicode in Python 3, quindi quanto sopra non è probabilmente corretto per Python 3.

Alcuni buoni collegamenti:


mybytestring.encode (somecodec) è significativo per questi valori di somecodec :

  • Base64
  • bz2
  • zlib
  • esadecimale
  • quopri
  • rot13
  • string_escape
  • uu

Non sono sicuro di cosa sia utile per decodificare un testo Unicode già decodificato. Provare che con qualsiasi codifica sembra sempre cercare di codificare prima con la codifica predefinita del sistema.







python-2.x