ASCII simple codificación URL con el pitón
-
29-09-2019 - |
Pregunta
vistazo a lo siguiente:
import urllib
print urllib.urlencode(dict(bla='Ã'))
la salida es
bla=%C3%BC
lo que quiero es simple, quiero la salida en formato ASCII en lugar de UTF-8, así que necesito la salida:
bla=%C3
si trato:
urllib.urlencode(dict(bla='Ã'.decode('iso-8859-1')))
no funciona (todos mis archivos son pitón codificación UTF-8):
'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
En la producción, la entrada viene Unicode de.
Solución 5
gracias a todas las soluciones. todos ustedes convergen al mismo punto. Hice un lío de cambiar el código de la derecha
.encode('iso-8859-1')
a
.decode('iso-8859-1')
gire de nuevo a .encode ( 'iso-8859-1') y funciona.
Otros consejos
Para consultar Unicode transliteración en python :
from unidecode import unidecode
print unidecode(u"\u5317\u4EB0")
# That prints: Bei Jing
En su caso:
bla='Ã'
print unidecode(bla)
'A'
Esta es una biblioteca de terceros, que se puede instalar fácilmente a través de:
$ git clone http://code.zemanta.com/tsolc/git/unidecode
$ cd unidecode
$ python setup.py install
Quiero la salida en formato ASCII en lugar de UTF-8
Eso no es ASCII, que no tiene caracteres asignados por encima de 0x80. Estás hablando de la norma ISO-8859-1, o posiblemente página de códigos 1252 (Windows codificación basado en él).
'Ã'.decode('iso-8859-1')
Bueno, eso depende de qué codificación se ha utilizado para guardar el Ã
carácter en la fuente, no es cierto? Parece que su editor de texto ha guardado como UTF-8. (Eso es algo bueno, porque las codificaciones locale-específicos como ISO-8859-1 necesidad de irse lo antes posible.)
Dile a Python que el archivo de origen que haya guardado está en UTF-8 como por PEP 263 :
# coding=utf-8
urllib.quote(u'Ã'.encode('iso-8859-1')) # -> %C3
O, si usted no quiere que sin problemas, utilice un escape de barra invertida:
urllib.quote(u'\u00C3'.encode('iso-8859-1')) # -> %C3
Aunque, de cualquier manera, una aplicación de web moderno debe utilizar UTF-8 para su entrada en lugar de ISO-8859-1 / CP1252.
asciification bastante bien de trabajo es de esta manera:
import unicodedata
unicodedata.normalize('NFKD', 'Ã'.decode('UTF-8')).encode('ascii', 'ignore')
Si la entrada es en realidad UTF-8 y desea iso-8859-1 como salida (que no es ASCII) lo que necesita es:
'ñ'.decode('utf-8').encode('iso-8859-1')
transcripciones US-ASCII de texto Unicode.
una versión mejorada de Python unidecode, que es el puerto de Python Texto :: módulo de Perl Unidecode por Sean M. Burke.
pip install Unihandecode
entonces en python
import unihandecode
print(unihandecode.unidecode(u'Ã'))
impresiones A
.