Estoy tratando de ingresar algunos caracteres UTF-8 en un archivo LaTeX en TextMate (que dice que su codificación predeterminada es UTF-8), pero LaTeX no parece entenderlos.
La ejecución cat my_file.tex
muestra los caracteres correctamente en la Terminal. La ejecución ls -al
muestra algo que nunca había visto antes: una "@" en la lista de archivos:
-rw-r--r--@ 1 me users 2021 Feb 11 18:05 my_file.tex
(Y sí, lo estoy usando \usepackage[utf8]{inputenc}
en LaTeX).
Lo he encontrado iconv
, pero eso no parece ser capaz de decirme cuál es la codificación: solo se convertirá una vez que lo descubra.
Respuestas:
Los
@
medios de que el archivo tiene archivo extendido atributos asociados con él. Puedes consultarlos usando lagetxattr()
función.No hay una forma definitiva de detectar la codificación de un archivo. Lea esta respuesta, explica por qué.
Hay una herramienta de línea de comandos, enca , que intenta adivinar la codificación. Quizás quieras revisarlo.
fuente
@
incluyan el atributo de codificación del archivo. Puede usar el comandoxattr -p com.apple.TextEncoding <filename>
para ver el atributo de codificación si existe.ls -l@ <filename>
para ver qué atributos están establecidos para el archivo. Para ver el atributo real, escribaxattr -p com.apple.TextEncoding <filename>
enca
hacerlobrew install enca
y tienes que especificar el idioma pero ninguno funciona, entonces:enca FILENAME -L __
El uso de la
-I
opción (que es una i mayúscula) en el comando de archivo parece mostrar la codificación del archivo.fuente
file -I *
Parece funcionar perfectamente para mí (en OSX). Un sistema se quejó de la codificación de uno de los muchos archivos, sin especificar cuál. Todos los archivos eran ascii, excepto uno, que era utf-8. Lo más probable es el culpable.En Mac OS X, el 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 vas a Terminal y usas vi para crear un archivo, por ejemplo.
vi test.txt
luego inserte algunos caracteres e incluya un carácter acentuado (intente ALT-e seguido de e) luego guarde el archivo.Escriben
file -I text.txt
y deberías obtener un resultado como este:test.txt: text/plain; charset=utf-8
fuente
file
comando reclama suus-ascii
alias en algún lugar de mi configuración bash como
así que solo escribo
En mi vanilla OSX Yosemite, produce resultados más precisos que "archivo -I":
fuente
También puede convertir de un tipo de archivo a otro con el siguiente comando:
p.ej
fuente
Solo usa:
Eso es.
fuente
file -I
me atrapatext/plain; charset=unknown-8bit
. A pesar de que funciona mejor para un archivo UTF-8:text/plain; charset=utf-8
.Usar el
file
comando con la--mime-encoding
opción (pfile --mime-encoding some_file.txt
. Ej. ) En lugar de la opción -I funciona en OS X y tiene el beneficio adicional de omitir el tipo mime, "text / plain", que probablemente no le interese.fuente
file
comando. No sabía que existía. Novato. De todas formas. Perdón por el voto negativo. SO no me deja deshacerlo a menos que alguien edite esta respuesta.El clásico LaTeX de 8 bits está muy restringido en 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 esa fuente tenga disponibles.
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 sitio.
Aquí hay un ejemplo mínimo que muestra cómo se pueden usar algunos caracteres UTF8 en un documento LaTeX:
Es posible que tenga más suerte con la codificación [utf8x], pero tenga en cuenta que ya no es compatible y tiene algunas idiosincrasias en comparación con [utf8] (por lo que recuerdo; ha pasado un tiempo desde que lo vi). Pero si funciona, eso es todo lo que importa para ti.
fuente
El signo @ significa que el archivo tiene atributos extendidos .
xattr file
muestra qué atributos tiene, tambiénxattr -l file
muestra los valores de los atributos (que a veces pueden ser grandes; intente, por ejemplo,xattr /System/Library/Fonts/HelveLTMM
ver una fuente antigua que exista en la bifurcación de recursos).fuente
Escribir
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.Un
Localizable.strings
archivo (que se encuentra en aplicaciones localizadas de Mac OS X) generalmente se informa como un archivo fuente UTF-16 C.fuente
Synalyze It! permite comparar texto o bytes en todas las codificaciones que ofrece la biblioteca ICU . Al usar esa función, generalmente ve de inmediato qué página de códigos tiene sentido para sus datos.
fuente
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.
fuente
¿Qué LaTeX estás usando? Cuando estaba usando teTeX, tuve que descargar manualmente el paquete Unicode y agregar esto a mis archivos .tex:
Ahora, me cambié a XeTeX desde el paquete TeXlive 2008 ( aquí ), es aún más simple:
En cuanto a la detección de la codificación de un archivo, puedes jugar
file(1)
(pero es bastante limitado) pero, como dijo alguien más, es difícil.fuente
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 wiki.
Si puede encontrar una manera más simple de obtener un programa para verificar la codificación por usted, obviamente es un acceso directo, pero si todo lo demás falla, esto sería el truco.
fuente
Implementé el script bash a continuación, funciona para mí.
Primero intenta
iconv
desde la codificación devuelta porfile --mime-encoding
toutf-8
.Si eso falla, pasa por todas las codificaciones y muestra la diferencia entre el archivo original y el codificado nuevamente. Se salta las codificaciones que producen una gran salida de diferencia ("grande" según lo definido por la
MAX_DIFF_LINES
variable o el segundo argumento de entrada), ya que es muy probable que la codificación sea incorrecta.Si suceden "cosas malas" como resultado del uso de este script, no me culpe. Hay una
rm -f
allí, así que habrá monstruos. Traté de evitar efectos adversos al usarlo en archivos con un sufijo aleatorio, pero no estoy haciendo ninguna promesa.Probado en Darwin 15.6.0.
fuente