Estou tentando inserir alguns caracteres UTF-8 em um arquivo LaTeX no TextMate (que diz que sua codificação padrão é UTF-8), mas o LaTeX parece não entendê-los.
A execução cat my_file.tex
mostra os caracteres corretamente no Terminal. A execução ls -al
mostra algo que eu nunca vi antes: um "@" na lista de arquivos:
-rw-r--r--@ 1 me users 2021 Feb 11 18:05 my_file.tex
(E, sim, estou usando \usepackage[utf8]{inputenc}
no LaTeX.)
Eu descobri iconv
, mas isso não parece ser capaz de me dizer qual é a codificação - ela só será convertida quando eu descobrir.
Respostas:
O
@
meio que o arquivo estendeu atributos de arquivo associados a ele. Você pode consultá-los usando agetxattr()
funçãoNão há uma maneira definida de detectar a codificação de um arquivo. Leia esta resposta, explica o porquê.
Existe uma ferramenta de linha de comando, enca , que tenta adivinhar a codificação. Você pode querer dar uma olhada.
fonte
@
incluam o atributo de codificação de arquivo. Você pode usar o comandoxattr -p com.apple.TextEncoding <filename>
para examinar o atributo de codificação, se existir.ls -l@ <filename>
para ver quais atributos estão definidos para o arquivo. Para ver o atributo real, digitexattr -p com.apple.TextEncoding <filename>
enca
fazerbrew install enca
e você tem que especificar a língua, mas nenhum funciona, então:enca FILENAME -L __
Usar a opção
-I
(que é um i maiúsculo) no comando file parece mostrar a codificação do arquivo.fonte
file -I *
parece funcionar perfeitamente para mim (no OSX). Um sistema reclamou da codificação de um dos muitos arquivos, sem especificar quais. Todos os arquivos eram ascii, exceto um, que era utf-8. Provavelmente o culpado.No Mac OS X, o comando
file -I
(capital i) fornecerá o conjunto de caracteres adequado, desde que o arquivo que você está testando contenha caracteres fora do intervalo ASCII básico.Por exemplo, se você for ao Terminal e usar o vi para criar um arquivo, por exemplo.
vi test.txt
em seguida, insira alguns caracteres e inclua um caractere acentuado (tente ALT-e seguido por e) e salve o arquivo.Eles digitam
file -I text.txt
e você deve obter um resultado como este:test.txt: text/plain; charset=utf-8
fonte
file
comando reivindica seuus-ascii
alias em algum lugar da minha configuração do bash como
então eu apenas digito
No meu OSX Yosemite de baunilha, ele produz resultados mais precisos que o "arquivo -I":
fonte
Você também pode converter de um tipo de arquivo para outro usando o seguinte comando:
por exemplo
fonte
Apenas use:
É isso aí.
fonte
file -I
me entendetext/plain; charset=unknown-8bit
. Embora ele funciona melhor para um arquivo UTF-8:text/plain; charset=utf-8
.Usar o
file
comando com a--mime-encoding
opção (por exemplofile --mime-encoding some_file.txt
) em vez da opção -I funciona no OS X e tem o benefício adicional de omitir o tipo mime, "text / plain", com o qual você provavelmente não se importa.fonte
file
comando. Não sabia que existia. Novato. De qualquer forma. Desculpe pelo voto negativo. SO não me permitirá desfazer a menos que alguém edite esta resposta.O LaTeX clássico de 8 bits é muito restrito em quais caracteres UTF8 ele pode usar; é altamente dependente da codificação da fonte que você está usando e dos glifos disponíveis.
Como você não fornece um exemplo específico, é difícil saber exatamente onde está o problema - se você está tentando usar um glifo que sua fonte não possui ou se não está usando a codificação de fonte correta no primeiro Lugar, colocar.
Aqui está um exemplo mínimo, mostrando como alguns caracteres UTF8 podem ser usados em um documento LaTeX:
Você pode ter mais sorte com a codificação [utf8x], mas esteja um pouco avisado de que ela não é mais suportada e tem algumas idiossincrasias em comparação com a [utf8] (tanto quanto me lembro; já faz um tempo desde que a observei). Mas se der certo, é tudo o que importa para você.
fonte
O sinal @ significa que o arquivo possui atributos estendidos .
xattr file
mostra quais atributos ele possui,xattr -l file
mostra também os valores dos atributos (que às vezes podem ser grandes - tente, por exemplo,xattr /System/Library/Fonts/HelveLTMM
ver uma fonte de estilo antigo existente na bifurcação de recursos).fonte
Digitar
file myfile.tex
em um terminal pode às vezes indicar a codificação e o tipo de arquivo usando uma série de algoritmos e números mágicos. É bastante útil, mas não conte com o fornecimento de informações concretas ou confiáveis.Um
Localizable.strings
arquivo (encontrado em aplicativos Mac OS X localizados) geralmente é relatado como um arquivo de origem UTF-16 C.fonte
Synalyze It! permite comparar texto ou bytes em todas as codificações que a biblioteca ICU oferece. Usando esse recurso, você geralmente vê imediatamente qual página de código faz sentido para seus dados.
fonte
Você pode tentar carregar o arquivo em uma janela do firefox e ir para Exibir - Codificação de caracteres. Deve haver uma marca de seleção ao lado do tipo de codificação do arquivo.
fonte
Qual LaTeX você está usando? Quando estava usando o teTeX, tive que baixar manualmente o pacote unicode e adicioná-lo aos meus arquivos .tex:
Agora, mudei para o XeTeX a partir do pacote TeXlive 2008 ( aqui ), é ainda mais simples:
Quanto à detecção da codificação de um arquivo, você pode brincar
file(1)
(mas é bastante limitado), mas, como alguém disse, é difícil.fonte
Uma maneira de força bruta para verificar a codificação pode ser apenas verificar o arquivo em um editor hexadecimal ou similar. (ou escreva um programa para verificar) Veja os dados binários no arquivo. O formato UTF-8 é bastante fácil de reconhecer. Todos os caracteres ASCII são bytes únicos com valores abaixo de 128 (0x80) sequências de vários bytes seguem o padrão mostrado no artigo da wiki
Se você puder encontrar uma maneira mais simples de obter um programa para verificar a codificação para você, isso é obviamente um atalho, mas se tudo mais falhar, isso funcionaria.
fonte
Eu implementei o script bash abaixo, ele funciona para mim.
Ele primeiro tenta a
iconv
partir da codificação retornada porfile --mime-encoding
parautf-8
.Se isso falhar, ele passa por todas as codificações e mostra a diferença entre o arquivo original e o recodificado. Ele pula as codificações que produzem uma saída diferencial grande ("grande", conforme definido pela
MAX_DIFF_LINES
variável ou pelo segundo argumento de entrada), pois essas são provavelmente a codificação incorreta.Se "coisas ruins" acontecerem como resultado do uso desse script, não me culpe. Tem um
rm -f
lá, então tem monstros. Tentei evitar efeitos adversos usando-o em arquivos com sufixo aleatório, mas não estou fazendo nenhuma promessa.Testado em Darwin 15.6.0.
fonte