Error de Unicode Ordinal no dentro del rango

Error impar con Unicode para mí. Estaba tratando con unicode bien, pero cuando lo ejecuté esta mañana, un artículo u ‘\ u201d’ dio error y me dio

UnicodeError: ASCII encoding error: ordinal not in range(128) 

Busqué el código y aparentemente es utf-32, pero cuando bash decodificarlo en el intérprete:

 c = u'\u201d' c.decode('utf-32', 'replace') 

O cualquier otra operación con eso, simplemente no lo reconoce en ningún códec, pero aún así lo encontré como “MARCA DE CITA DOBLE CORRECTA”

Yo obtengo:

 Traceback (most recent call last): File "", line 1, in  c.decode('utf-32') File "C:\Python27\lib\encodings\utf_32.py", line 11, in decode return codecs.utf_32_decode(input, errors, True) UnicodeEncodeError: 'ascii' codec can't encode character u'\u201d' in position 0: ordinal not in range(128) 

Ya tiene una cadena Unicode, no hay necesidad de decodificarla a una cadena Unicode nuevamente .

Lo que sucede en ese caso es que Python trata de codificarlo por ti, para que puedas decodificarlo desde utf-32 . Utiliza la encoding predeterminada para hacerlo, que resulta ser ASCII. Aquí hay una encoding explícita para mostrarle la excepción planteada en ese caso:

 >>> u'\u201d'.encode('ASCII') Traceback (most recent call last): File "", line 1, in  UnicodeEncodeError: 'ascii' codec can't encode character u'\u201d' in position 0: ordinal not in range(128) 

En resumen, cuando tienes un literal Unicode como u'' , no hay necesidad de decodificarlo.

Lea sobre el Unicode, las codificaciones y la configuración predeterminada en el CÓMO de Python Unicode . Otro artículo inestimable sobre el tema es la publicación de conocimiento de Unicode Minimun de Joel Spolsky.