Eu uso o Emacs para editar um arquivo XML que também é lido por outro aplicativo. O outro aplicativo requer que o arquivo comece com um marcador de ordem de bytes (BOM). No entanto, o Emacs parece remover a lista técnica toda vez que edito o arquivo. Existe uma maneira de fazer o Emacs deixar a lista técnica em paz?
8
Respostas:
O Emacs escreverá uma lista técnica ou não, dependendo do sistema de codificação que estiver usando. O Emacs escolhe automaticamente o sistema de codificação usado ao visitar um arquivo.
Você pode alterar o sistema de codificação para utf-8-with-signature, o que instruirá o Emacs a escrever a BOM.
Para alterar o sistema de codificação de um arquivo visitado:
Você pode definir o sistema de codificação que o Emacs usa para um arquivo específico, definindo uma variável de arquivo . Consulte a seção manual fina 57.3.4 Variáveis locais em arquivos para aprender como fazer isso.
fonte
Acompanhamento da resposta de Richard Hoskins: se você nunca deseja que a BOM seja oculta pelo emacs, pode desativar os códigos * -with-signature com este trecho:
A lista técnica é U + FEFF, o “espaço sem quebra de largura zero”, e não aparece como uma caixa no meu emacs 23.1.1. Em vez disso, a linha superior do arquivo se moveu ligeiramente para baixo e às vezes uma caixa aparece em torno da primeira linha - mas você pode ver que a lista técnica está lá e excluí-la, se necessário.
fonte
O Emacs "em si" não deve mexer com a lista técnica; se realmente estiver fazendo isso, teria que ser o código que implementa o "modo" do Emacs que você está usando para editar seus arquivos XML e remover a BOM. Como você não diz qual é, só posso consultar a documentação desse modo ou abrir os arquivos
fundamental-mode
(ou no modo não destrutivo semelhante). Ou tenteM-x find-file-literally
se tudo mais falhar.fonte
find-file-literally
e o fizerM-x sgml-mode
, a BOM não será removida. Como caracteres especiais não são codificados em UTF-8 ao visitar um arquivo literalmente, seria bom descobrir onde, na conversão de formato subjacente e no código de conversão de código de caractere, a BOM é removida.No meu teste, editar um
UTF-8
arquivo não altera a codificação e a BOM permanece (efbb bf
). (modo nxml)Bem, isso pode variar entre
xml-mode
enxml-mode
, ou a versão do emacs (24 vs 26). Diz o modo na parte inferior.Se você editar um arquivo XML do Emacs e codificado em unicode (
UTF-16
little endian), ele mudará a codificação paraUTF-16
big endian. Talvez seja sobre isso que ele está falando.Mas a lista técnica ainda está lá, alterada de
fffe
paraffef
, e os nulos estão no byte ímpar, em vez do par. Você pode vê-lo no modo hexl.Arquivo xml de amostra. O atributo encoding direciona a codificação quando o emacs a salva no modo xml ou nxml. Uma versão futura será corrigida para verificar primeiro a lista técnica.
Parece que o Emacs aceita
UTF-16
comoUTF-16BE
, enquanto o Windows aceita comoUTF-16LE
(BE e LE não funcionam no Emacs para o atributo de codificação). O atributo de codificação é provavelmente a chave para os problemas aqui.Salvá-lo no PowerShell o converterá novamente em utf-16le.
Com codificação = "UTF-16LE" e codificação = "UTF-16BE", o bom é removido, tornando o arquivo irreconhecível no emacs. Este é um bug confirmado que será corrigido: http://lists.gnu.org/archive/html/bug-gnu-emacs/2019-05/msg00892.html
fonte