Por que o VIM mostra o ponto de código Unicode e não o valor de código UTF-8?

7

Considere esta suposta linha de código que encontrei em um blog PHP, observe as aspas:

throw new Exception(“That's not a server name!”);

Essas aspas são MARK DUPLO DE COTAÇÃO CERTA (ponto de código Unicode: U+201D ; Valor codificado em hexadecimal UTF-8: 0xE2 0x80 0x9D ). Pressionar g a no VIM exibe o seguinte na barra de status:

<”> 8221, Hex 201d, Octal 20035

Por que o ponto de código Unicode está sendo exibido e não o valor do código UTF-8?

Considerando que o arquivo é armazenado como UTF-8 e é o terminal traduzindo os bytes em glifos, eu esperaria que o VIM mostrasse o valor bruto do arquivo (valor de código UTF-8) , não para traduzi-lo em um ponto de código Unicode.

    
por dotancohen 23.07.2014 / 08:38

2 respostas

16

Why is the Unicode code point being displayed and not the UTF-8 code value?

Porque você usa ga :

<”> 8221, Hex 201d, Octal 20035

em vez de g8 :

e2 80 9d
    
por 23.07.2014 / 10:17
13

Porque o Vim é um editor de texto e trabalha com pontos de código de texto, não bytes. Há mais do que apenas uma tradução acontecendo - ao abrir um arquivo, o editor deve decodificá-lo da codificação de bytes para uma representação interna (geralmente Unicode); ao salvar de volta em um arquivo ou ao exibir seu conteúdo no terminal, o editor deve codificar o texto de volta para bytes.

Uma razão para isso é simples - o arquivo e o terminal podem estar usando conjuntos de caracteres diferentes . Por exemplo, você está editando alguns documentos antigos na ISO 8859-13 ou KOI8-R e deseja que eles sejam exibidos corretamente em um terminal UTF-8.

A segunda razão, mais uma vez, é que os editores de texto trabalham com texto. Por exemplo, é um caractere e sua largura é uma célula terminal, independentemente de sua codificação de byte (3 bytes em UTF-8, 1 byte no Windows-1257, 2 bytes no Shift-JIS e assim por diante). Se o Vim apenas contasse como três bytes, mas o terminal mostrasse como um, isso resultaria em desalinhamentos verticais desalinhados, linhas quebradas muito cedo, guias muito estreitas e assim por diante.

Instead of this...                ...you would see this.

┌───────────────────────────┐     ┌───────────────────────────┐
│She said, "Hello."         │     │She said, "Hello."         │
│                           │     │                           │
│She said, “Hello.”         │     │She said, “Hello.”     │
│                           │     │                           │
│Ji pasakė, „Sveiki“.       │     │Ji pasakė, „Sveiki“. │
└───────────────────────────┘     └───────────────────────────┘

Sem mencionar que você teria que retroceder três vezes para excluir um único caractere.

    
por 23.07.2014 / 10:37