macos - por - finder no muestra archivos
¿Cómo determino la codificación de archivos en OSX? (16)
¿Qué LaTeX estás usando? Cuando estaba usando teTeX, tuve que descargar manualmente el paquete unicode y agregarlo a mis archivos .tex:
% UTF-8 stuff
/usepackage[notipa]{ucs}
/usepackage[utf8x]{inputenc}
/usepackage[T1]{fontenc}
Ahora, cambié a XeTeX desde el paquete TeXlive 2008 ( here ), es aún más simple:
% UTF-8 stuff
/usepackage{fontspec}
/usepackage{xunicode}
En cuanto a la detección de la codificación de un archivo, podría jugar con el file(1)
(pero es bastante limitado) pero, como dijo otra persona, es difícil.
Intento ingresar algunos caracteres UTF-8 en un archivo LaTeX en TextMate (que dice que su codificación predeterminada es UTF-8), pero parece que LaTeX no los entiende. La ejecución de cat my_file.tex
muestra los caracteres correctamente en Terminal. Ejecutar ls -al
muestra algo que nunca he visto antes: una "@" en la lista del archivo:
-rw-r--r--@ 1 me users 2021 Feb 11 18:05 my_file.tex
(Y, sí, estoy usando /usepackage[utf8]{inputenc}
en LaTeX).
He encontrado iconv
, pero parece que no puede decirme qué es la codificación, solo se convertirá una vez que lo encuentre.
El clásico LaTeX de 8 bits está muy restringido en cuanto a los caracteres UTF8 que puede usar; depende en gran medida de la codificación de la fuente que está utilizando y de los glifos que la fuente tiene disponible.
Como no da un ejemplo específico, es difícil saber exactamente dónde está el problema: si está intentando usar un glifo que su fuente no tiene o si no está usando la codificación de fuente correcta en el primer lugar.
Aquí hay un ejemplo mínimo que muestra cómo se pueden usar algunos caracteres UTF8 en un documento LaTeX:
/documentclass{article}
/usepackage[T1]{fontenc}
/usepackage{lmodern}
/usepackage[utf8]{inputenc}
/begin{document}
‘Héllø—thêrè.’
/end{document}
Puede que tenga más suerte con la codificación [utf8x], pero tenga un poco de advertencia de que ya no es compatible y tiene algunas idiosincrasias en comparación con [utf8] (hasta donde recuerdo, ha pasado un tiempo desde que lo he mirado). Pero si hace el truco, eso es todo lo que importa para ti.
El signo @ significa que el archivo tiene atributos extendidos . xattr file
muestra los atributos que tiene, el xattr -l file
muestra los valores de los atributos (que a veces puede ser grande; intente, por ejemplo, xattr /System/Library/Fonts/HelveLTMM
para ver una fuente antigua que existe en la bifurcación de recursos).
El uso de file
comando de file
con la opción --mime-encoding
(por ejemplo, file --mime-encoding some_file.txt
) en lugar de la opción -I funciona en OS X y tiene el beneficio adicional de omitir el tipo de mime, "text / plain", que probablemente no te importe
El uso de la opción -I
(que es una mayúscula i) en el comando de archivo parece mostrar la codificación del archivo.
file -I {filename}
En Mac OS X, el file -I
comando file -I
(mayúscula i) le dará el juego de caracteres adecuado siempre que el archivo que está probando contenga caracteres fuera del rango ASCII básico.
Por ejemplo, si ingresas a la Terminal y usas vi para crear un archivo, por ejemplo. vi test.txt
luego inserta algunos caracteres e incluye un carácter acentuado (prueba ALT-e seguido de e) luego guarda el archivo.
file -I text.txt
y debería obtener un resultado como este:
test.txt: text/plain; charset=utf-8
Escribir el file myfile.tex
en un terminal a veces puede indicarle la codificación y el tipo de archivo utilizando una serie de algoritmos y números mágicos. Es bastante útil, pero no confíe en que proporcione información concreta o confiable.
Normalmente, se informa que un archivo Localizable.strings
(que se encuentra en aplicaciones localizadas de Mac OS X) es un archivo fuente C UTF-16.
Implementé el script bash a continuación, funciona para mí.
Primero intenta iconv
partir de la codificación devuelta por el file --mime-encoding
a utf-8
.
Si eso falla, pasa por todas las codificaciones y muestra la diferencia entre el archivo original y el recodificado. Se saltea codificaciones que producen una gran salida de diff ("grande" como se define por la variable MAX_DIFF_LINES
o el segundo argumento de entrada), ya que es muy probable que la codificación sea incorrecta.
Si ocurren "cosas malas" como resultado del uso de este script, no me culpes. Hay una rm -f
allí, entonces habrá monstruos. Traté de evitar los efectos adversos al usarlo en archivos con un sufijo aleatorio, pero no estoy haciendo ninguna promesa.
Probado en Darwin 15.6.0.
#!/bin/bash
if [[ $# -lt 1 ]]
then
echo "ERROR: need one input argument: file of which the enconding is to be detected."
exit 3
fi
if [ ! -e "$1" ]
then
echo "ERROR: cannot find file ''$1''"
exit 3
fi
if [[ $# -ge 2 ]]
then
MAX_DIFF_LINES=$2
else
MAX_DIFF_LINES=10
fi
#try the easy way
ENCOD=$(file --mime-encoding $1 | awk ''{print $2}'')
#check if this enconding is valid
iconv -f $ENCOD -t utf-8 $1 &> /dev/null
if [ $? -eq 0 ]
then
echo $ENCOD
exit 0
fi
#hard way, need the user to visually check the difference between the original and re-encoded files
for i in $(iconv -l | awk ''{print $1}'')
do
SINK=$1.$i.$RANDOM
iconv -f $i -t utf-8 $1 2> /dev/null > $SINK
if [ $? -eq 0 ]
then
DIFF=$(diff $1 $SINK)
if [ ! -z "$DIFF" ] && [ $(echo "$DIFF" | wc -l) -le $MAX_DIFF_LINES ]
then
echo "===== $i ====="
echo "$DIFF"
echo "Does that make sense [N/y]"
read $ANSWER
if [ "$ANSWER" == "y" ] || [ "$ANSWER" == "Y" ]
then
echo $i
exit 0
fi
fi
fi
#clean up re-encoded file
rm -f $SINK
done
echo "None of the encondings worked. You''re stuck."
exit 3
Puede intentar cargar el archivo en una ventana de Firefox y luego ir a Ver - Codificación de caracteres. Debe haber una marca de verificación junto al tipo de codificación del archivo.
Solo usa:
file -I <filename>
Eso es.
Soy perezoso. Solo uso el texto sublime para cambiar las codificaciones.
También puede convertir de un tipo de archivo a otro usando el siguiente comando:
iconv -f original_charset -t new_charset originalfile > newfile
p.ej
iconv -f utf-16le -t utf-8 file1.txt > file2.txt
Una forma de fuerza bruta para verificar la codificación podría ser simplemente verificar el archivo en un editor hexadecimal o similar. (o escriba un programa para verificar) Mire los datos binarios en el archivo. El formato UTF-8 es bastante fácil de reconocer. Todos los caracteres ASCII son bytes individuales con valores inferiores a 128 (0x80). Las secuencias multibyte siguen el patrón que se muestra en el artículo de la wiki.
Si puede encontrar una forma más sencilla de obtener un programa para verificar la codificación, obviamente es un atajo, pero si todo lo demás falla, esto sería suficiente.
¡Synalyze It! permite comparar texto o bytes en todas las codificaciones que ofrece la biblioteca ICU . Al usar esa función, normalmente verá de inmediato qué página de códigos tiene sentido para sus datos.
@
Significa que el archivo tiene atributos de archivo extendidos asociados. Puede consultarlos usando la función getxattr()
.
No hay una manera definida de detectar la codificación de un archivo. Lea this respuesta, explica por qué.
Hay una herramienta de línea de comandos, enca , que intenta adivinar la codificación. Quizás quieras revisarlo.
vim -c ''execute "silent !echo " . &fileencoding | q'' {filename}
aliased en algún lugar de mi configuración de bash como
alias vic="vim -c ''execute /"silent !echo /" . &fileencoding | q''"
así que simplemente escribo
vic {filename}
En mi vainilla OSX Yosemite, arroja resultados más precisos que "archivo -I":
$ file -I pdfs/udocument0.pdf
pdfs/udocument0.pdf: application/pdf; charset=binary
$ vic pdfs/udocument0.pdf
latin1
$
$ file -I pdfs/t0.pdf
pdfs/t0.pdf: application/pdf; charset=us-ascii
$ vic pdfs/t0.pdf
utf-8