traduccion characters utf-8 character-encoding file-encodings

utf 8 - characters - ¿Cómo puedo estar seguro de la codificación del archivo?



utf-8 html (4)

(en Linux)

$ chardet <filename>

también entrega el nivel de confianza [0-1] de la salida.

Tengo un archivo PHP que creé con VIM, pero no estoy seguro de cuál es su codificación.

Cuando uso el terminal y compruebo la codificación con el file -bi foo comandos file -bi foo (Mi sistema operativo es Ubuntu 11.04), me da el siguiente resultado:

text/html; charset=us-ascii

Pero, cuando abro el archivo con gedit, dice que su codificación es UTF-8.

¿Cuál es la correcta? Quiero que el archivo esté codificado en UTF-8.

Supongo que no hay una lista de materiales en el archivo y que el file -bi comandos file -bi lee el archivo y no encuentra ningún carácter UTF-8, por lo que supone que es ascii, pero en realidad está codificado en UTF-8.


Basado en la respuesta de @Celada y en @Arthur Zennig, he creado este sencillo script:

#/bin/bash if [ "$#" -lt 1 ] then echo "Usage: utf8-check filename" exit 1 fi chardet $1 countchars="$(tr -d //000-//177 < $1 | wc -c)" if [ $countchars -eq 0 ] then echo "Ascii"; exit 0 fi { iconv -f utf-8 -t ucs-4 < $1 >/dev/null echo "UTF-8" } || { echo "not UTF-8 or corrupted" }


Bueno, en primer lugar, tenga en cuenta que ASCII es un subconjunto de UTF-8, por lo que si su archivo solo contiene caracteres ASCII, es correcto decir que está codificado en ASCII y es correcto decir que está codificado en UTF-8.

Dicho esto, el file normalmente solo examina un segmento corto al principio del archivo para determinar su tipo, por lo que podría declararlo us-ascii si hay caracteres no ASCII pero están más allá del segmento inicial del archivo. Por otro lado, gedit podría decir que el archivo es UTF-8 incluso si es ASCII porque UTF-8 es la codificación de caracteres preferida de gedit y tiene la intención de guardar el archivo con UTF-8 si desea agregar caracteres no ASCII durante su sesión de edición. Una vez más, si eso es lo que dice gedit, no estaría mal.

Ahora a tu pregunta:

  1. Ejecute este comando:

    tr -d //000-//177 < your-file | wc -c

    Si la salida dice "0", entonces el archivo solo contiene caracteres ASCII. Está en ASCII (y también es válido UTF-8) Fin de la historia.

  2. Ejecuta este comando

    iconv -f utf-8 -t ucs-4 < your-file >/dev/null

    Si recibe un error, el archivo no contiene UTF-8 válido (o al menos, alguna parte está dañada).

    Si no recibe ningún error, es muy probable que el archivo sea UTF-8. Esto se debe a que UTF-8 tiene propiedades que hacen que sea muy difícil confundir el texto típico en cualquier otra codificación de caracteres comúnmente utilizada para UTF-8 válido.


$ file --mime my.txt my.txt: text/plain; charset=iso-8859-1