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
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.
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.