É 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?