utf8_encode utf8 codificacion charset caracteres array agregar mysql character-encoding mojibake

mysql - codificacion - utf8_encode array php



Corregir codificaciones (1)

Terminé con codificaciones de caracteres en mal estado en una de nuestras columnas de MySQL.

Típicamente tengo

√ © en lugar de é
√∂ en lugar de ö
√ ≠ en lugar de í

y así...

Estoy bastante seguro de que alguien aquí sabrá lo que sucedió y cómo solucionarlo.

ACTUALIZACIÓN: Basado en la respuesta de Bobince y como tenía estos datos en un archivo hice lo siguiente

#!/user/bin/env python import codecs f = codecs.open(''./file.csv'', ''r'', ''utf-8'') f2 = codecs.open(''./file-fixed.csv'', ''w'', ''utf-8'') for line in f: f2.write(line.encode(''macroman'').decode(''utf-8'')),

después de lo cual

load data infile ''file-fixed.csv'' into table list1 fields terminated by '','' optionally enclosed by ''"'' ignore 1 lines;

importar correctamente los datos.

ACTUALIZACIÓN2: Hammerite, solo para completar aquí están los detalles solicitados ...

mysql> SHOW VARIABLES LIKE ''character_set%''; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+

El SHOW CREATE TABLE para la tabla a la que estoy importando tiene DEFAULT CHARSET=utf8

EDIT3:

De hecho, con la configuración anterior, la load no hizo lo correcto (no pude comparar con los campos utf8 existentes y mis datos cargados solo parecían cargados correctamente; supongo que debido a un cliente, conexión y resultados incorrectos, pero coincidentes) conjuntos de caracteres), así que actualicé la configuración a:

+--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+

subí datos nuevamente y finalmente obtuve los datos cargados correctamente (comparable con los datos existentes).


Su texto ha sido codificado para UTF-8 y luego decodificado, erróneamente, como Mac Roman .

No podrá arreglar esto dentro de la base de datos, ya que MySQL no conoce la codificación Mac Rom. Puede escribir un script para recorrer cada fila de cada tabla afectada y corregir el texto invirtiendo el ciclo de codificación / decodificación. Python es una posibilidad, ya que tiene un buen rango de codificaciones:

>>> print u''√©''.encode(''macroman'').decode(''utf-8'') é >>> print u''√∂''.encode(''macroman'').decode(''utf-8'') ö >>> print u''√≠''.encode(''macroman'').decode(''utf-8'') í

Alternativamente, si no hay contenido no ASCII que no se vea afectado por este problema, puede intentar usar mysqladmin para exportar un volcado de SQL y luego convertirlo todo de una vez, ya sea usando un script como el anterior o si tiene un editor de texto ( presumiblemente en Mac) que puede hacerlo, cargando el script como UTF-8 y luego guardándolo como Mac Roman. Finalmente, vuelva a importar el volcado utilizando mysql < dump.sql .