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:
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.
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