Como exibir Unicode UTF-8 como Unicode?


12

Eu tenho alguns arquivos de texto codificados em UTF-8 que exibem códigos de escape estranhos no Emacs. Por exemplo, este texto:

Em ista quaestione primo exponam quid intelligendum est for hoc nomen 'Deus'; segundo, responde ad quaestionem.

Shows como este no Emacs:

insira a descrição da imagem aqui

Isso só acontece no Emacs. Outros editores mostram o texto corretamente. Como posso resolver este problema?


Atualização 1

Se eu ligar revert-buffer-with-coding-systeme selecionar utf-8o arquivo, será lido corretamente. Portanto, como Gilles adivinhou corretamente, o Emacs não está detectando a codificação do arquivo. Se eu adicionar o código ; -*- coding: utf-8 -*-ao arquivo, o Emacs será aberto e exibido corretamente.


Atualização 2

Eu recodifiquei o arquivo em "UTF-8 com codificação de BOM" e agora ele é exibido corretamente no Emacs. Não sei qual é a diferença entre os dois tipos, mas o Emacs parece estar ciente apenas do BOM.


O Emacs não está reconhecendo o arquivo como UTF-8. Qual é o conteúdo do seu arquivo init? Qual versão do Emacs você está executando? Isso muda alguma coisa se você iniciar o Emacs com emacs -qou emacs -Q?
Gilles 'SO- stop be evil'

Não tenho nenhum problema com outros arquivos UTF-8. Estou executando o GNU Emacs 24.4.4. Não há diferença com emacs -qou emacs -Q.
NVaughan

Ah, se funcionar com outros arquivos e em uma configuração original, o motivo provavelmente é que o arquivo também contém UTF-8 inválido em algum lugar. Deixe-me ver como contar com o Emacs ...
Gilles 'stop SO estar mal'

possivelmente relacionados: emacs.stackexchange.com/q/4100/2264
Sean Allred

Respostas:


10

Por alguma razão, o Emacs não está reconhecendo o arquivo como UTF-8. Você pode forçar o Emacs a reabrir o arquivo como UTF-8 executando o comando C-x RET r( revert-buffer-with-coding-system) e digitando utf-8.

O motivo pelo qual o Emacs não reconheceu esse arquivo como UTF-8 (mas reconhece outro) provavelmente é que ele contém alguma sequência UTF-8 inválida. Essa sequência ainda aparecerá como barra invertida seguida por três dígitos octais com uma cor diferente (a escape-glyphface) após a reinterpretação do arquivo como UTF-8. Você pode procurar essa sequência executando C-M-s( isearch-regexp) e procurando

[^^@-~[:multibyte:]]

onde ^@é digitada digitando C-q C-SPC(é o caractere ^ @ = 0, não a sequência de dois caracteres circunflexa; o caractere antes de ser o caractere circunflexo).

Você pode forçar o Emacs para reconhecer o arquivo como UTF-8, adicionando uma variável de arquivo sistema de codificação : colocar algo como -*-coding: utf-8-*-na primeira linha, ou colocar algo como isso perto do final do arquivo (você pode substituir #por qualquer prefixo, mas Local Variables:e End:obrigação aparecem exatamente assim com os dois pontos à direita):

# Local Variables:
# coding: utf-8
# End:

O Emacs escolhe a codificação de acordo com a qual os arquivos são interpretados com base em várias configurações, principalmente ambientes de idiomas e variáveis auto-coding-aliste auto-coding-regexp-alist. Como você tem o mesmo problema com este arquivo, mesmo em execução emacs -Q, acho que esse não é um problema com essas configurações, mas com o conteúdo do arquivo.


Se eu abrir o arquivo sem a variável de arquivo de sistema de codificação (ou seja, quando o arquivo exibe erradamente) e executar a pesquisa regex, todo o meu \342, \200, \230, etc. selecionado. Mas se eu abrir "corretamente" (usando a variável de codificação), nenhum resultado da pesquisa será exibido.
NVaughan

@NVaughan Hmmm. Então eu não entendo por que esse arquivo não é reconhecido como UTF-8 quando outros são (especialmente abaixo emacs -Q).
Gilles 'SO- stop be evil'

1

É tarde para responder à pergunta sobre a lista técnica, mas farei de qualquer maneira.

A marca de ordem dos bytes (BOM) é uma sequência de três bytes \ xef \ xbb \ xbf que, no início de um arquivo, indica aos sistemas e aplicativos que o conteúdo está codificado como UTF-8. Devidamente, são metadados, não tratados como parte do conteúdo.

A maioria dos aplicativos - o Emacs é um deles - honra a BOM e grava todos os arquivos UTF-8. Outras aplicações podem honrá-lo na leitura, mas não escrevê-lo; e outros não sabem disso e podem lançar uma mensagem de erro quando a encontrarem. Em outras palavras, a situação é confusa. Eu prefiro usá-lo sempre que possível.


-1

Somente para sistemas UNIX.

Em muitos casos, a definição de codificação direta em ~ / .bashrc ~ / bash_profile

LANG=en_EN.UTF8

realizado com

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8

em ~ / .profile deve resolver seu problema.

PS Após essas correções, é necessário RELOGIN na sua sessão para permitir que as alterações se tornem visíveis.


Embora o que você diz possa ser útil, isso não parece responder a essa pergunta, pois o problema estava apenas com alguns arquivos utf-8.
JeanPierre

Suponha que após a definição de codificação rigorosa em arquivos de configuração este problema pode desaparecer por todos os arquivos para sempre acabar nunca :-)
Alioth
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.