Cómo determinar la tabla de codificación de un archivo de texto


Tengo archivos .txt y .java y no sé cómo determinar la tabla de codificación de los archivos (Unicode, UTF-8, ISO-8525, ISO). ¿Existe algún programa para determinar la codificación del archivo o para ver la codificación?

Author: erik, 2010-11-23

5 answers

Si estás en Linux, prueba file -i filename.txt.

$ file -i vol34.tex 
vol34.tex: text/x-tex; charset=us-ascii

Para referencia, aquí está mi entorno:

$ which file
/usr/bin/file
$ file --version
file-5.09
magic file from /etc/magic:/usr/share/misc/magic

Algunas versiones de file (por ejemplo, file-5.04 en OS X/macOS) tienen conmutadores de línea de comandos ligeramente diferentes:

$ file -I vol34.tex 
vol34.tex: text/x-tex; charset=us-ascii
$ file --mime vol34.tex
vol34.tex: text/x-tex; charset=us-ascii

También, echa un vistazo aquí.

 44
Author: mpenkov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-29 23:46:15

Abra el archivo con Notepad++ y verá en la esquina inferior derecha el nombre de la tabla de codificación. Y en el menú codificación puede cambiar la tabla de codificación y guardar el archivo.

 23
Author: Ballon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-23 11:27:44

No puede detectar de forma fiable la codificación de un archivo de texto - lo que puede hacer es conjetura educada buscando un carácter no ascii y tratando de determinar si es un combinación unicode que hace sens en los idiomas que está analizando.

 9
Author: Nikolaus Gradwohl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-23 11:15:07

Vea esta pregunta y la respuesta seleccionada. No hay manera segura de hacerlo. Como mucho, puedes descartar cosas. Es poco probable que obtenga falsos positivos en las codificaciones UTF, pero las codificaciones de 8 bits son difíciles, especialmente si no conoce el idioma de inicio. Ninguna herramienta por ahí actualmente maneja todas las codificaciones comunes de 8 bits de Macs, Windows, Unix, pero la respuesta seleccionada proporciona un enfoque algorítmico que debería funcionar adecuadamente para un cierto subconjunto de codificación.

 3
Author: tchrist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:18:02

En un archivo de texto no hay encabezado que guarde la codificación o algo así. Puede probar el comando linux / unix find que intenta adivinar la codificación:

file -i unreadablefile.txt

O en algunos sistemas

file -I unreadablefile.txt

Pero eso a menudo te da text/plain; charset=iso-8859-1 aunque el archivo es ilegible (glifos crípticos).

Esto es lo que hice para encontrar la codificación de archivo correcta para un archivo ilegible y luego traducirlo a utf8 was, después de instalar iconv. Primero probé todas las codificaciones, mostrando (grep) una línea que contenía la palabra www. (una dirección web):

for ENCODING in $(iconv -l); do echo -n "$ENCODING "; iconv -f $ENCODING -t utf-8 unreadablefile.txt 2>/dev/null| grep 'www'; done | less

Esta última línea de comandos muestra la codificación del archivo probado y luego la línea traducida/transcodificada.

Hubo algunas líneas que mostraron resultados legibles y consistentes (un idioma a la vez). Probé manualmente algunos de ellos, por ejemplo:

ENCODING=WINDOWS-936; iconv -f $ENCODING -t utf-8 unreadablefile.txt -o test_with_${ENCODING}.txt

En mi caso era una codificación de windows en chino, que ahora es legible (si sabes chino).

 1
Author: erik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-10 14:46:30