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.

¿Fue útil?

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')

unihandecode

  

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top