Pregunta

Tengo un archivo de texto codificado ANSI que no debería haber sido codificado como ANSI ya que había acento Caracteres que no admite ANSI. Preferiría trabajar con UTF-8.

¿Se pueden decodificar correctamente los datos o se pierden en la transcodificación?

¿Qué herramientas puedo usar?

Aquí hay una muestra de lo que tengo:

ç é

Puedo decir por el contexto (la cafetería debería ser una cafetería) que estos deberían ser estos dos caracteres:

ç é
¿Fue útil?

Solución

EDITAR: Una posibilidad simple de eliminar antes de encontrar soluciones más complicadas: ¿has intentado configurar el conjunto de caracteres en utf8 en el editor de texto en el que estás leyendo el archivo? Esto podría ser simplemente el caso de alguien que te envía un archivo utf8 que estás leyendo en un editor que dice cp1252.

Simplemente tomando los dos ejemplos, este es un caso de utf8 que se lee a través de la lente de una codificación de un solo byte, probablemente uno de iso-8859-1, iso-8859-15, o cp1252. Si puede publicar ejemplos de otros caracteres problemáticos, debería ser posible reducirlos más.

Como la inspección visual de los caracteres puede ser engañosa, también deberá observar los bytes subyacentes: el & # 167; lo que ves en la pantalla puede ser 0xa7 o 0xc2a7, y eso determinará el tipo de conversión de juego de caracteres que tienes que hacer.

¿Puede asumir que todos sus datos se han distorsionado exactamente de la misma manera? que provienen de la misma fuente y pasan por la misma secuencia de transformaciones, por lo que, por ejemplo, no hay un solo & # 233; en su texto, siempre es & # 195; & # 167 ;? Si es así, el problema se puede resolver con una secuencia de conversiones de conjuntos de caracteres. Si puede ser más específico sobre el entorno en el que se encuentra y la base de datos que está utilizando, es probable que alguien aquí le diga cómo realizar la conversión adecuada.

De lo contrario, si los caracteres problemáticos solo aparecen en algunos lugares de sus datos, tendrá que tomarlos instancia por instancia, basándose en suposiciones a lo largo de las líneas de " ningún autor pretende poner & # 195; & # 167; en su texto, así que cada vez que lo vea, reemplace por & # 231; " ;. La última opción es más arriesgada, en primer lugar porque las suposiciones acerca de las intenciones de los autores pueden ser erróneas, en segundo lugar porque usted mismo deberá detectar todos los caracteres problemáticos, lo que podría ser imposible si hay demasiado texto para inspeccionar visualmente o si está escrito. en un idioma o sistema de escritura que sea ajeno a ti.

Otros consejos

Sigue estos pasos con Notepad ++

1- Copia el texto original

2- En Notepad ++, abra un archivo nuevo, cambie la codificación - > elige una codificación que crees que sigue el texto original. Pruebe también la codificación " ANSI " como a veces los archivos Unicode son leídos como ANSI por ciertos programas

3- Pegar

4- Luego, para convertir a Unicode, vaya nuevamente al mismo menú: Codificación - > " Codificar en UTF-8 " (No " Convertir a UTF-8 ") y con suerte se volverá legible

Los pasos anteriores se aplican a la mayoría de los idiomas. Solo necesita adivinar la codificación original antes de pegar en notepad ++, luego convierta a través del mismo menú a una codificación alternativa basada en Unicode para ver si las cosas se vuelven legibles.

La mayoría de los idiomas existen en 2 formas de codificación: 1- La antigua forma ANSI (ASCII), de solo 8 bits, fue utilizada inicialmente por la mayoría de las computadoras. 8 bits solo permitieron 256 posibilidades, de las cuales 128 de los caracteres latinos regulares y de control, los 128 bits finales se leyeron de manera diferente dependiendo de la configuración del lenguaje de la PC 2- El nuevo estándar de Unicode (hasta 32 bits) proporciona un código único para cada carácter En todos los idiomas actualmente conocidos y mucho más por venir. si un archivo es Unicode, debe entenderse en cualquier PC con la fuente del idioma instalada. Tenga en cuenta que incluso UTF-8 sube a 32 bits y es tan amplio como UTF-16 y UTF-32 solo intenta mantener 8 bits con caracteres latinos solo para ahorrar espacio en el disco

Cuando ve secuencias de caracteres como ç y à ©, por lo general es una indicación de que un programa UTF-8 ha sido abierto por un programa que lo lee como ANSI (o similar). Caracteres de Unicode como estos:

U + 00C2 mayúscula latina con circunflejo
U + 00C3 letra mayúscula latina A con tilde
U + 0082 Se permite el descanso aquí
U + 0083 No hay pausa aquí

tienden a aparecer en texto ANSI debido a la estrategia de byte variable que utiliza UTF-8. Esta estrategia se explica muy bien aquí .

La ventaja para usted es que la apariencia de estos caracteres impares hace que sea relativamente fácil encontrar, y así reemplazar, instancias de conversión incorrecta.

Creo que, dado que ANSI siempre usa 1 byte por carácter, puede manejar esta situación con una simple operación de búsqueda y reemplazo. O más convenientemente, con un programa que incluye una asignación de tablas entre las secuencias ofensivas y los caracteres deseados, como estos:

â € œ - > "# Debe ser una cita doble de apertura

â €? - > "# Debería ser una cita doble de cierre

Cualquier texto dado, suponiendo que esté en inglés, tendrá un número relativamente pequeño de diferentes tipos de sustituciones.

Espero que ayude.

Con vim desde la línea de comando:

vim -c "set encoding=utf8" -c "set fileencoding=utf8" -c "wq" filename

En el editor de texto sublime, archivo - > reabrir con codificación - > elige la codificación correcta.

En general, la codificación se detecta automáticamente, pero si no, puedes usar el método anterior.

Si ve signos de interrogación en el archivo o si los acentos ya están perdidos, volver a utf8 no ayudará a su causa. p.ej. Si el café se convierte en café, cambiar la codificación por sí solo no ayudará (y necesitará datos originales).

Puedes pegar un texto aquí, eso nos ayudará a responder con seguridad.

Y luego está el programa recode un poco más antiguo.

Hay programas que intentan detectar la codificación de un archivo como chardet . Luego puedes convertirlo a una codificación diferente usando iconv. Pero eso requiere que el texto original aún esté intacto y que no se pierda información (por ejemplo, eliminando acentos o letras con acento completo).

Encontré una forma sencilla de detectar automáticamente las codificaciones de archivos: cambie el archivo a un archivo de texto (en una mac cambie el nombre de la extensión de archivo a .txt) y arrástrelo a una ventana de Mozilla Firefox (o Archivo - > Abrir) . Firefox detectará la codificación. Puedes ver lo que ocurrió en Ver - > Codificación de caracteres.

Una vez que supe la codificación correcta, cambié la codificación de mi archivo utilizando TextMate. Archivo - > Vuelva a abrir utilizando la codificación y elija su codificación. Luego Archivo - > Guarde como y cambie la codificación a UTF-8 y los finales de línea a LF (o lo que quiera)

En OS X ¡Synalyze It! le permite visualizar partes de su archivo en diferentes codificaciones (todas las cuales son compatibles con la biblioteca de la UCI). Una vez que sepa cuál es la codificación de origen, puede copiar todo el archivo (bytes) a través del portapapeles e insertarlo en un nuevo documento donde se selecciona la codificación de destino (UTF-8 o lo que quiera).

Muy útil cuando se trabaja con UTF-8 u otras representaciones de Unicode es UnicodeChecker

Encontré esta pregunta al buscar una solución a un problema de página de códigos que tenía con caracteres chinos, pero al final mi problema era solo un problema con Windows que no los muestra correctamente en la interfaz de usuario.

En caso de que alguien más tenga el mismo problema, puede solucionarlo simplemente cambiando el local en Windows a China y luego de nuevo.

Encontré la solución aquí:

http://answers.microsoft.com/en-us/windows/forum/windows_7-desktop/how-can-i-get-chinesejapanese-characters- to / fdb1f1da-b868-40d1-a4a4-7acadff4aafa? page = 2 & amp; auth = 1

También subestimó la respuesta de Gabriel, ya que mirar los datos en el bloc de notas ++ fue lo que me alertó sobre las ventanas.

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