Con frecuencia encuentro archivos de texto (como archivos de subtítulos en mi idioma nativo, persa ) con problemas de codificación de caracteres. Estos archivos se crean en Windows y se guardan con una codificación inadecuada (parece ser ANSI), que parece incoherente e ilegible, así:
En Windows, se puede solucionar esto fácilmente usando Notepad ++ para convertir la codificación a UTF-8, como a continuación:
Y el resultado legible correcto es así:
He buscado mucho una solución similar en GNU / Linux, pero desafortunadamente las soluciones sugeridas (por ejemplo, esta pregunta ) no funcionan. Sobre todo, he visto a personas sugerir iconv
y recode
no he tenido suerte con estas herramientas. He probado muchos comandos, incluidos los siguientes, y todos han fallado:
$ recode ISO-8859-15..UTF8 file.txt
$ iconv -f ISO8859-15 -t UTF-8 file.txt > out.txt
$ iconv -f WINDOWS-1252 -t UTF-8 file.txt > out.txt
¡Ninguno de estos funcionó!
Estoy usando Ubuntu-14.04 y estoy buscando una solución simple (ya sea GUI o CLI) que funcione igual que Notepad ++.
Un aspecto importante de ser "simple" es que no se requiere que el usuario determine la codificación de origen; más bien, la herramienta debería detectar automáticamente la codificación de origen y solo el usuario debería proporcionar la codificación de destino. Sin embargo, también me alegrará saber acerca de una solución de trabajo que requiera que se proporcione la codificación de origen.
Si alguien necesita un caso de prueba para examinar diferentes soluciones, se puede acceder al ejemplo anterior a través de este enlace .
vim '+set fileencoding=utf-8' '+wq' file.txt
.iso-639
, pero eso no parece estar disponible, ya sea eniconv
orecode
. Al menos, no lo veo en la salida deiconv -l
.vim
pero no funcionó.Respuestas:
Estos archivos de Windows con texto persa están codificados en Windows-1256 . Por lo tanto, se puede descifrar mediante un comando similar a OP probado, pero con diferentes conjuntos de caracteres. A saber:
recode Windows-1256..UTF-8 <Windows_file.txt > UTF8_file.txt
(denunciado por las quejas del póster original; ver comentarios)
Éste supone que la variable de entorno LANG está configurada en un entorno local UTF-8. Para convertir a cualquier codificación (UTF-8 o de otro modo), independientemente de la configuración regional actual, se puede decir:
El póster original también se confunde con las herramientas semánticas de recodificación de texto (recodificación, iconv). Para la codificación de origen ( fuente
..
o -f) se debe especificar la codificación con la que se guarda el archivo (por el programa que lo creó). No algunas conjeturas (ingenuas) basadas en caracteres mojibake en programas que intentan (pero fallan) leerlo. Intentar con ISO-8859-15 o WINDOWS-1252 para un texto persa fue obviamente un callejón sin salida: estas codificaciones simplemente no contienen ninguna letra persa.fuente
iconv
) funcionó. Pero el primero (usandorecode
) no funcionó correctamente y la salida aún era un galimatías. Edite su respuesta para incluir solo eliconv
comando y lo marcaré como la respuesta.iconv -f WINDOWS-1256 -t UTF-8 in.txt > out.txt
lo que probé y trabajé. Por lo tanto, puede ser una buena idea editar su comando de esta manera.Además de
iconv
, que es una herramienta muy útil por sí sola o en un script, hay una solución realmente simple que encontré tratando de resolver el mismo problema para los charsets griegos (Windows-1253 + ISO-8859-7).Todo lo que necesita hacer es abrir el archivo de texto a través del cuadro de diálogo "Abrir" de Gedit y no haciendo doble clic en él . En la parte inferior del cuadro de diálogo hay un menú desplegable para Codificación, que se establece en "Detectado automáticamente" . Cámbielo a "Windows-125x" u otro conjunto de códigos adecuado y el texto será perfectamente legible en Gedit. Luego puede guardarlo usando la codificación UTF-8, solo para asegurarse de que no volverá a tener el mismo problema en el futuro ...
fuente
Como solución complementaria al problema, he preparado un útil script Bash basado en el
iconv
comando de la respuesta de Incnis Mrsi :Guarde este script como
fix-encoding.sh
, déle permiso de ejecución usandochmod +x fix-encoding.sh
y úselo de esta manera:Este script intentará corregir la codificación de cualquier número de archivos que se proporcionan como entrada. Tenga en cuenta que los archivos se corregirán en el lugar, por lo que se sobrescribirán los contenidos.
fuente
No sé si esto funciona con Farsi: uso Gedit, falla con la codificación incorrecta, y puedo elegir lo que quiero traducir a UTF-8, era solo formato de texto no iluminado, pero aquí hay una captura de pantalla !
Lo siento, finalmente pude leer mis archivos de texto, así que ahora están todos convertidos.
También me encantó notepad ++, todavía lo extraño.
fuente
Si te gusta trabajar en GUI en lugar de CLI, como a mí me gusta:
fuente
La solución de trabajo que encontré es usar el editor de texto de Microsoft Visual Studio Code , que es gratuito y está disponible para Linux.
Abra el archivo que desea convertir su codificación en VS-Code. En la parte inferior de la ventana, hay algunos botones. Uno de ellos está relacionado con la codificación del archivo, como se muestra a continuación:
Al hacer clic en este botón, aparece un menú superior que incluye dos elementos. Desde este menú, seleccione la opción "Reabrir con codificación", como se muestra a continuación:
Esto abrirá otro menú que incluye una lista de diferentes codificaciones, como se muestra a continuación. Ahora seleccione "Árabe (Windows 1256)":
Esto arreglará el texto de galimatías así:
Ahora haga clic en el botón de codificación nuevamente y esta vez seleccione la opción "Guardar con codificación", como se muestra a continuación:
Y en el nuevo menú, seleccione la opción "UTF-8":
Esto guardará el archivo corregido usando la codificación UTF-8:
¡Hecho!
:)
fuente