Domanda

un'occhiata a quanto segue:

import urllib
print urllib.urlencode(dict(bla='Ã'))

l'uscita è

bla=%C3%BC

quello che voglio è semplice, voglio l'output in formato ASCII anziché utf-8, quindi ho bisogno l'output:

bla=%C3

se provo:

urllib.urlencode(dict(bla='Ã'.decode('iso-8859-1')))

non funziona (tutti i miei file Python sono codifica UTF-8):

'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

Nella produzione, l'ingresso viene in Unicode.

È stato utile?

Soluzione 5

grazie a tutte le soluzioni. voi tutti convergono per lo stesso punto. Ho fatto un pasticcio cambiare il codice giusto

.encode('iso-8859-1') 

a

.decode('iso-8859-1')

tornare indietro al .encode ( 'iso-8859-1') e funziona.

Altri suggerimenti

Date un'occhiata al unicode traslitterazione in Python :

from unidecode import unidecode
print unidecode(u"\u5317\u4EB0")

# That prints: Bei Jing

Nel tuo caso:

bla='Ã'
print unidecode(bla)
'A'

Si tratta di una libreria di terze parti, che può essere facilmente installato tramite:

$ git clone http://code.zemanta.com/tsolc/git/unidecode
$ cd unidecode
$ python setup.py install
  

Voglio l'output in formato ASCII anziché utf-8

Questo non è ASCII, che non ha caratteri mappati sopra 0x80. Stai parlando di ISO-8859-1, o, eventualmente, il codice 1252 (Windows la codifica basata su di esso).

'Ã'.decode('iso-8859-1')

Beh, questo dipende da quello che codifica hai utilizzato per salvare il à carattere nella fonte, non è vero? Sembra che il tuo editor di testo è salvato come UTF-8. (Questa è una buona cosa, perché codifiche locale-specifici, come ISO-8859-1 necessità di andare via al più presto.)

Dillo Python che il file di origine che hai salvato è in UTF-8 come da PEP 263 :

# coding=utf-8

urllib.quote(u'Ã'.encode('iso-8859-1'))    # -> %C3

In alternativa, se non si vuole che seccatura, utilizzare una fuga backslash:

urllib.quote(u'\u00C3'.encode('iso-8859-1'))    # -> %C3

Anche se, in entrambi i casi, una webapp moderno dovrebbe usare UTF-8 per il suo contributo, piuttosto che ISO-8859-1 / CP1252.

asciification abbastanza bene di lavoro è in questo modo:

import unicodedata
unicodedata.normalize('NFKD', 'Ã'.decode('UTF-8')).encode('ascii', 'ignore')

Se l'input è in realtà UTF-8 e si desidera iso-8859-1 come uscita (che non è ASCII) quello che vi serve è:

'ñ'.decode('utf-8').encode('iso-8859-1')

unihandecode è

  

traslitterazioni US-ASCII di testo Unicode.
  una versione migliorata di Python unidecode, che è la porta di Python Text :: modulo Perl Unidecode da Sean M. Burke.

pip install Unihandecode

poi nel python

import unihandecode
print(unihandecode.unidecode(u'Ã'))

stampe A.

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