sql >> Base de Datos >  >> RDS >> PostgreSQL

Python + PostgreSQL + ascii extraño =error de codificación UTF8

La pregunta comienza con una premisa falsa:

Los caracteres ASCII están en el rango "\x00" a "\x7F" inclusive.

La respuesta previamente aceptada y ahora eliminada operó bajo dos graves malentendidos (1) esa configuración regional ==codificación (2) que la codificación latin1 asigna "\x80" a un carácter de euro.

De hecho, todas las codificaciones ISO-8859-x asignan "\x80" a U+0080, que es uno de los caracteres de control C1, no un carácter Euro. Solo 3 de esas codificaciones (x en (7, 15, 16)) proporcionan el carácter Euro, como "\xA4". Consulte este artículo de Wikipedia .

Necesitas saber en qué codificación están sus datos. ¿En qué máquina se crearon? ¿Cómo? La configuración regional en la que se creó (no necesariamente la tuya) puede darte una pista.

Tenga en cuenta que "Mis datos están codificados en latin1" está a la altura de "El cheque está en el correo" y "Por supuesto que te amaré por la mañana". Sus datos probablemente estén codificados en una de las codificaciones cp125x que se encuentran en las plataformas Windows. Tenga en cuenta que todos ellos excepto cp1251 (cirílico de Windows) asignan "\x80" al carácter del euro:

>>> ['\x80'.decode('cp125' + str(x), 'replace') for x in range(9)]
[u'\u20ac', u'\u0402', u'\u20ac', u'\u20ac', u'\u20ac', u'\u20ac', u'\u20ac', u'\u20ac', u'\u20ac']

Actualizar en respuesta al comentario del OP

Esto es un poco confuso:Primero dices

Pero luego dices

Por favor explique.

Selección de una codificación cp125x adecuada:¿Dónde (ubicación geográfica) se creó el archivo? ¿En qué idioma(s) está escrito el texto? ¿Algún carácter que no sea el presunto euro con valores> "\x7f"? Si es así, ¿cuáles y en qué contexto se usan?

Actualización 2 Si no "sabe cómo está escrito el programa", ni usted ni nosotros podemos formarnos una opinión sobre si siempre usa "\x80" para el carácter del euro. Aunque hacer lo contrario sería una tontería monumental, no se puede descartar.

Si el texto está escrito en inglés y/o está escrito en los EE. UU. y/o está escrito en una plataforma Windows, entonces es razonablemente seguro que cp1252 es el camino a seguir... hasta que obtenga evidencia de lo contrario, en cuyo caso necesitaría adivinar una codificación por sí mismo o responder a las preguntas (en qué idioma, en qué localidad).