Por que certos caracteres são terrivelmente errados no Windows?

16

Caracteres ímpares:

ก็็็็็็็็็็็็็็็็็็็็ กิิิิิิิิิิิิิิิิิิิิ ก้้้้้้้้้้้้้้้้้้้้ ก็็็็็็็็็็็็็็็็็็็็ กิิิิิิิิิิิิิิิิิิิิ ก็็็็็็็็็็็็็็็็็็็็ กิิิิิิิิิิิิิิิิิิิิ ก้้้้้้้้้้้้้้้้้้้้ ก็็็็็็็็็็็็็็็็็็็็ กิิิิิิิิิิิิิิิิิิิิ.

Pergunta: Por que esses caracteres são tão estranhos quando você os observa no Windows *?

Aqui está um trecho do Outlook para seus sortudos que não são forçados a usar o Windows:

Coisa

Relacionado: Qual é a codificação de caracteres usada?

* Windows como no sistema operacional. Os aplicativos que desenham texto usando GTK + e coisas do tipo não os mostram como algo fora de uma viagem de LSD que deu errado .

Marcus Hansson
fonte
Você está dizendo que, na sua máquina Windows, os caracteres digitados na pergunta se parecem com os da imagem? Porque os caracteres digitados ficam bem na minha máquina Windows.
dsolimano
11
Sua pergunta contém uma alegação infundada - que o Windows as considera "erradas". Seria bom se você declarasse como acha que elas devem ser desenhadas e o que há de errado com a maneira como o Windows as desenha.
David Schwartz
2
Eu ficaria curioso para ver como os outros sistemas operacionais lidam com isso, só vejo como o Windows faz isso e para mim isso parece "certo".
Mokubai
11
Também relacionado: pt.wikipedia.org/wiki/Combining_character
iglvzx 21/02

Respostas:

10

Como pareço ter me impressionado ao pensar que o Windows está "fazendo o certo", acho que devo postar uma resposta para justificar minha posição.

O fato é que o texto que você tem está dizendo ao sistema operacional para renderizar uma quantidade insana de caracteres combinados. O problema que um sistema operacional realmente os processa enquanto outro não ocorre devido a vários problemas. Uma dessas questões é a profundidade com que os programadores foram quando escreveram o código para renderizá-las, e outra seria devido à falta de programação dos programadores para implementá-los adequadamente, se houver.

Basicamente, tudo se resume à idéia de que os idiomas escritos são coisas fluidas e que muitos caracteres em certos idiomas têm vários sinais diacríticos diferentes que são aplicados para modificar a pronúncia dos caracteres. Como lidamos com todos esses sinais diacríticos, atribuímos a cada letra com um diacrítico um novo caractere (o que resultaria em muitos caracteres novos e quase idênticos) ou criamos um conjunto de caracteres especificamente para diacríticos e reduzimos nossa alfabeto geral?

O Unicode nos dá o escopo para fazer as duas coisas, mas, ao fazê-lo, os programadores que precisam renderizar esses diacríticos precisam lidar com o fato de que existem alguns caracteres que realmente têm vários diacríticos, um acima e outro abaixo, e então o programador para fazer a pergunta de quando eles param. Eles poderiam limitá-lo a dois e satisfazer a maioria das pessoas, mas ignoram aqueles que querem ou precisam de três diacríticos para escrever formalmente em seu próprio idioma.

A Microsoft, com ou sem razão, decidiu deixar o usuário decidir quantas notas extras uma pessoa deseja usar. Esse caminho exige um bom programador e uma racionalização difícil a seguir. Eu os apoio totalmente ao permitir isso e ao fato de que eles fazem isso bem .

Por outro lado, se esses personagens estavam faltando, eu gostaria de saber por que eles estavam desaparecidos. Foi uma xdecisão "deixamos isso cair no chão após os sinais diacríticos" ou porque os programadores estão com preguiça de fazê-lo corretamente e potencialmente me expondo a algum estouro de buffer com código oculto nos sinais diacríticos que estão sendo distribuídos para serem executados por o sistema?

A questão simples aqui é que, ao renderizar esses caracteres, posso ver que o sistema está fazendo exatamente o que é solicitado a fazer, em vez de fazer o que acha certo ou, pior ainda, fazer algo potencialmente prejudicial .

Mokubai
fonte
11
Ou: Por que o Windows desenha caracteres terrivelmente errados tão bem?
mtone 21/02
Cobrir o texto de outra pessoa atende aos critérios de "potencialmente prejudicial" em meu livro. (Talvez a mensagem que está sendo encoberta seja importante.) Aliás, minha solução preferida seria alguma forma de recorte, em vez de um limite no número de diacríticos. (Se não são realmente línguas que usam caracteres que se sobrepõem com caracteres em linhas adjacentes, eu não me importo de saber sobre ele!)
Harry Johnston
Além disso: como é improvável que a MS mude esse comportamento em breve, o Facebook e outros sites que aceitam dados do usuário provavelmente tentarão higienizar o conjunto de caracteres para evitar que os brincalhões usem mal esse "recurso". Infelizmente, o processo de higienização pode ter efeitos colaterais indesejáveis. Se o Windows cortou a saída, isso não seria necessário.
Harry Johnston
4

Por que esses caracteres são tão estranhos quando você os observa no Windows *?

Como o Windows tenta renderizar um grande número de caracteres de combinação Unicode quando o texto os contém, mesmo que nenhum script real jamais combine tantas marcas.

RedGrittyBrick
fonte
Presumivelmente, isso significa que o Windows está "fazendo o certo", de acordo com o que realmente está sendo solicitado, em vez de impor limites ao número de caracteres combinados que podem ser usados.
Mokubai
Veja também superuser.com/questions/389333/…, que parece indicar que esses truques ganharam popularidade no Facebook.
Jukka K. Korpela
@Mokubai: o problema é que não são dados confiáveis ​​- dados provenientes da internet. O Windows não deve necessariamente fazer o que os dados não confiáveis ​​solicitam, caso não sejam do interesse do usuário.
Harry Johnston
11
@HarryJohnston Eu ficaria mais preocupado se não mostrasse todos os sinais diacríticos, por favor, veja minha resposta.
Mokubai