Semplice codifica ASCII url con il pitone
-
29-09-2019 - |
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.
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')
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
.