Por que caracteres especiais alteram a largura do caractere de espaço à direita / à esquerda no Gedit ou medit?

2

Quando eu colo um caractere especial , do Mapa de Caracteres, no Gedit ou medit no Ubuntu 16.04, então os caracteres de espaço diretamente após o caractere especial exibe com um espaçamento de caracteres "compactado".

Exemplo

  1. Depois de alguns TABS iniciais, eu digito:

    A     >     B
    
  2. Eu copio e colo essa linha abaixo para duplicar
  3. Se eu substituir o caractere > digitado por colando
  4. Eu entendo isso:

    Você pode ver que os espaços após o foram reduzidos / compactados.

  5. Se eu excluir o caractere , os espaços retornarão à largura normal do caractere

Comportamento adicional observado:

  • Se eu começar uma nova linha com um "caractere não espacial" e colar o , os espaços principais serão não afetados
  • Se eu começar uma nova linha com espaços e colar o , então os espaços leading são também afetados

Testes

  1. O habitual:

    • pesquisar no Google
    • Pesquisa do AskUbuntu
    • pesquisa do StackOverflow
  2. Eu usei este Conversor literal de string Unicode para Java e meus espaços após o ainda serem espaços - nada de engraçado acontecendo lá.

  3. Assegurei-me de definir o conjunto de caracteres e o tamanho da fonte no Mapa de Caracteres da mesma forma que as configurações de fonte do Gedit.

    Isso não deve fazer nenhuma diferença - eu sei - mas eu fiz isso por uma questão de sanidade mental.

  4. Salva o conteúdo do Gedit em um arquivo HTML formatado corretamente e visualizado no Chrome:
    Espaçamento de caracteres normal - como esperado
  5. Copie / cole o conteúdo do Gedit em uma célula em branco no LibreOffice Calc:
    Espaçamento de caracteres normal - como esperado

Isso está me deixando louco.

Alguma idéia de por que isso está acontecendo?

UPDATE

Eu registrei um relatório de bug:

  • Ubuntu : Launchpad

  • GNOME

    • link
por TaoRich 14.12.2017 / 15:17

1 resposta

3

É um bug

O suporte do Gedit para caracteres Unicode superiores não é perfeito. Entenda que o que você vê no gedit não é necessariamente o que você recebe em outro aplicativo. O Gedit é um pequeno aplicativo divertido e útil, mas não é perfeito.

Aposto que um bug já foi reportado. Talvez seja um desses? link

Não vejo uma que corresponda ao que você está dizendo. Talvez você possa denunciar um novo bug seguindo estas etapas: link

Se você estiver escrevendo código, tente o IntelliJ ou outro editor mais sério. Mesmo vim pode fazer melhor. Eu testei e sua amostra funciona perfeitamente em ambos.

caractere UTF-8 de 3 bytes

Você está usando um caractere UTF-8 de 3 bytes:

e2af88

Eu rodei o xxd em um arquivo de teste criado pelo gedit - Versão 3.22.1. xxd V1.10 27oct98 por Juergen Weigert também não exibiu o caractere corretamente, mas cat (GNU coreutils) 8.26 fez.

Então, vamos percorrer o laborioso processo de traduzir a codificação UTF-8 para o caractere Unicode que ela representa.

Hx Binary
e2 1110 0010
af 1010 1111
88 1000 1000

Retire os controles (cada um termina com 0):

Ctr  Actual bits  Ctrl Meaning
1110 0010         1110 means: a three-byte character.
10   101111       10 means: continuation of character.
10   001000       10 means: continuation of character.

Concatene os bits reais:

0010101111001000

Converter de volta para hex (não mostra / importa neste exemplo, mas se o número de bits não dividir por 4 uniformemente, você tem que fazer grupos de 4 bits a partir do lado direito, então pad com zeros no lado esquerdo):

Hx Binary
2b 0010 1011
c8 1100 1000

Caractere Unicode

2bc8 é "⯈" ou "triângulo médio preto apontando para cima" U + 2BC8. Então, Gedit está salvando o caractere correto, simplesmente não exibindo os espaços ao redor corretamente.

Parece que o 2bc8 foi adicionado ao Unicode 7.0 em 2014: link

Talvez o gedit ainda não suporte totalmente o 7.0? Ou que os espaços às vezes são compactados perto de caracteres UTF-8 de 3 bytes?

    
por GlenPeterson 14.12.2017 / 15:44