O Emacs está me pedindo um sistema de codificação em cada salvamento

7

Consolidei muitos arquivos de texto (win, mac, unix) em um único arquivo orgmode. Para alguns caracteres, eu estava vendo números em vez dos caracteres certos. Coisas como \ 314 \ 203.

Eu usei "reverter-buffer-com-codificação-sytem" e escolha utf-8-hfs-unix. Isso conserta.

Mas agora, toda vez que eu salvo, o Emacs me pede para escolher um sistema de codificação. Se eu escolher o texto bruto, ele deixará de perguntar, mas quando abro o arquivo novamente, os números estão de volta.

Como faço para corrigir isso?

Jason Mirk
fonte
11
Que tal adicionar -*- coding: utf-8-hfs-unix;-*-na primeira linha do seu arquivo? ( gnu.org/software/emacs/manual/html_node/emacs/… )
JeanPierre
isso funcionou parcialmente. Não há mais números. O problema é que, quando eu salvo, o Emacs solicita novamente um sistema de codificação. Somente se eu escolher o texto bruto, posso salvar sem que ele me pergunte sempre.
Jason Mirk
2
O arquivo pode conter caracteres de vários conjuntos de caracteres incompatíveis?
JeanPierre
Acho que sim, mas como faço para corrigir isso?
Jason Mirk
11
Eu tive problemas nos primeiros dias usando o Emacs (alguns anos atrás), mas adotei a abordagem no link a seguir e nunca olhei para trás - Como redefinir o emacs para salvar arquivos na codificação de caracteres utf-8-unix? - stackoverflow.com/a/20736147/2112489 É semelhante à resposta anterior de elethen, mas tem algumas coisas que adicionei alguns anos atrás. No entanto, ainda existem alguns caracteres especiais que acionam um prompt. Como é tão raro encontrar esses caracteres (geralmente ao editar um arquivo após o reconhecimento óptico de caracteres), nunca gastei mais tempo com o problema.
lawlist

Respostas:

6

Isso aconteceu comigo por um tempo também antes de eu ter uma idéia do que estava acontecendo - aqui está um exemplo de como algo assim pode acontecer - (se importa, eu estou no Windows, caso seja algo específico dessa compilação) -

Digamos que você tenha um arquivo codificado em UTF-8 e cole algum texto de um site codificado com a página de código Latin-1 ou Windows-1252, por exemplo, um O com trema ou aspas onduladas.

Agora você tem uma sequência de caracteres codificados em UTF-8 seguida por algo que não faz sentido para UTF-8 ou possivelmente será mal interpretado. Se não puder interpretá-lo como uma sequência UTF-8 correta, ele será exibido como o valor bruto, por exemplo, octal \ 326 (que é um O com um trema na página de códigos Latin-1). Isso ocorre porque, para UTF-8, o \ 326 em particular deve ser seguido por algo com 10 nos dois bits mais altos e, se não for, não sabe o que fazer com ele.

Por exemplo, se você fosse para https://www.gnu.org/software/emacs/manual/html_node/emacs/Intro.html#Intro e copiasse algum texto que incluísse aspas, como "O` G 'no GNU " e colado em um buffer codificado em UTF-8, você terminaria com "The \ 221G \ 222 in GNU".

Então o que fazer?

Por um lado, você pode olhar para o buffer com diferentes sistemas de codificação para ver se ele exibirá esses caracteres corretamente, por exemplo, Windows-1252 e Latin-1 são bastante comuns -

M-x revert-buffer-with-coding-system windows-1252 RET
M-x revert-buffer-with-coding-system latin-1 RET

Se o documento parecer melhor dessa maneira, você poderá salvá-lo com esta nova codificação. Existem muitos sistemas de codificação diferentes.

Para voltar ao UTF-8, basta fazer

M-x revert-buffer-with-coding-system utf-8 RET

Por que isso acontece, não tenho certeza - parece que o Emacs saberia como algo foi codificado na área de transferência e o traduziria de acordo, mas não parece fazer isso.

Para obter mais explicações, consulte /programming/1543613/how-does-utf-8-variable-width-encoding-work e http://kunststube.net/encoding/ .

Brian Burns
fonte
11
Abri com o Visual Studio Code e ele foi lido perfeitamente. Salvo, aberto no emacs. Tudo parece bem agora!
Jason Mirk
@JasonMirk Interessante - talvez tenha adivinhado qual sistema de codificação usar para caracteres estranhos, como o Latin-1, e os traduzido para UTF-8?
Brian Burns
Acho que sim. É tudo bom homem. Saul Goodman.
Jason Mirk
Esta não é a solução, mas ajudou nos comentários de @JeanPierre. A idéia é ler o arquivo com a codificação desejada (Alt + x reverter-buffer-com-sistema de codificação) e procurar caracteres não ASCII para filtrar aqueles que permanecem inválidos (Mx search-forward-regex [[: nonascii:]] RET).
emagar