¿Cómo convertir un archivo de texto con una combinación de codificaciones a una codificación única?

¿Cómo convertir un archivo de texto con una combinación de codificaciones a una codificación única?
  1. Creé un archivo de texto copiando sus diferentes partes de diferentes fuentes (páginas web, otros archivos de texto, archivos pdf) en gedit y guardándolo en el archivo. Supongo que esa es la razón por la que tengo varias codificaciones en el archivo de texto, pero no estoy seguro. ¿Cómo puedo evitar crear un archivo de texto con codificaciones mixtas copiando sus diferentes partes de diferentes fuentes en gedit?
  2. Cada vez que abro el archivo en gedit, gedit siempre puede mostrar o decodificar cada parte del texto correctamente. Parece que gedit puede manejar un archivo de texto con codificaciones mixtas, pero no estoy seguro.

    Pero cuando abro el archivo en emacs, habrá caracteres que no se podrán mostrar correctamente. (No estoy seguro de por qué emacs no puede hacer eso). Entonces me gustaría convertir el archivo de codificaciones mixtas a una codificación única, como utf-8.

    Dado que creo que gedit puede detectar las codificaciones correctas para diferentes partes del archivo de texto, y no sé si hay otras aplicaciones que puedan hacerlo, ¿sería posible pedirle a gedit que convierta el archivo a utf-8, o ¿Al menos dime qué codificación encuentra para qué parte del archivo?

Gracias.

Respuesta1

Hmmm... el concepto de un archivo con varias codificaciones es algo inestable, para ser honesto. Si tienes un poco de tiempo,Este artículo(yÉste) vale la pena leer.

Para Linux un archivo es una secuencia de bytes. Si le pides a un programa que lo interprete como un archivo de texto, lo hará mediante un mapeo entre bytes y caracteres; este mapeo es la codificación. Casi todos los editores de texto que conozco (¡no los procesadores de texto!) simplemente entienden el concepto de una codificación para un archivo.

No soy experto en gedit; tal vez esté haciendo algo de magia, como intentar detectar automáticamente la codificación línea por línea o bloque de texto por bloque de texto... si es el caso, puedes intentar hacer lo mismo usandoenca(1):

 while read line; do echo $line | enconv -L none -x utf8; done < text.mixed > text.utf8

...pero depende de qué tan bueno sea enca para adivinar tu codificación (funciona casi bien con Europa del Este, pero no con Latin1, por ejemplo).

(1) Está en los repositorios, solo instálalo con sudo apt-get enca.

Respuesta2

Tuve el mismo problema y lo resolví con Emacs. La solución se cita deaquí:

Otra posible solución es marcar cada región que aparece con caracteres chinos y recodificarla con Mx recode-region, dando "El texto estaba realmente en" como utf-16-le y "Pero fue interpretado como" como utf-16-be.

Otra es dividir las dos partes que tienen codificaciones diferentes, copiarlas en archivos diferentes, convertir la codificación de una y agregarla a la otra. En mi caso, esto funcionó con Atom, pero no con Notepad++ (utf16-le/be).

información relacionada