¿Por qué ciertos personajes dibujan horriblemente, horriblemente mal en Windows?

16

Caracteres impares:

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

Pregunta: ¿Por qué estos caracteres se dibujan tan extraños cuando los miras en Windows *?

Aquí hay un fragmento de Outlook para los afortunados bastardos que no están obligados a usar Windows:

Cosas

Relacionado: ¿Cuál es la codificación de caracteres utilizada?

* Windows como en el sistema operativo. Las aplicaciones que dibujan texto usando GTK + y los "me gusta" no los muestran como algo que salió mal de un viaje de LSD .

Marcus Hansson
fuente
¿Está diciendo que en su máquina Windows, los caracteres que escribió en la pregunta se parecen a los caracteres de la imagen? Porque los caracteres escritos se ven bien en mi máquina Windows.
dsolimano
1
Su pregunta contiene un reclamo sin fundamento: que Windows los dibuja "incorrectos". Sería útil si dijese cómo cree que deberían dibujarse y qué específicamente está mal con la forma en que Windows los dibuja.
David Schwartz
2
Sería curioso ver cómo los otros sistemas operativos manejan esto, solo veo cómo lo hace Windows y para mí eso parece "correcto".
Mokubai
1
También relacionado: en.wikipedia.org/wiki/Combining_character
iglvzx

Respuestas:

10

Como parece haber recibido un pequeño golpe por pensar que Windows "lo está haciendo bien", creo que debería publicar una respuesta para justificar mi posición.

El hecho es que el texto que tiene le dice al sistema operativo que muestre una cantidad increíble de caracteres combinados. El problema que un sistema operativo realmente los representa mientras que otro no lo hace se debe a una serie de problemas. Uno de estos problemas es cuán minuciosos fueron los programadores cuando escribieron el código para representarlos, otro sería debido a que los programadores son demasiado flojos para implementarlos correctamente, si es que lo hacen.

Básicamente se trata de la idea de que los idiomas escritos son cosas fluidas, y que muchos caracteres en ciertos idiomas tienen múltiples signos diacríticos diferentes que se aplican para modificar la pronunciación de los caracteres. ¿Cómo manejamos todos estos signos diacríticos? ¿Le damos a cada letra con un carácter nuevo un signo diacrítico (lo que daría como resultado una gran cantidad de caracteres nuevos y casi idénticos) o creamos un conjunto de caracteres específicamente para diacríticos y reducimos nuestro alfabeto general?

Unicode nos da la posibilidad de hacer ambas cosas, pero al hacerlo, los programadores que tienen que representar estos diacríticos tienen que lidiar con el hecho de que hay algunos caracteres que realmente tienen múltiples signos diacríticos, uno arriba y otro abajo, y luego el programador tiene hacer la pregunta de cuándo se detienen. Podrían limitarlo a dos y satisfacer a la mayoría de las personas, pero ignorar a aquellos que quieren o necesitan tres diacríticos para escribir formalmente en su propio idioma.

Microsoft, ya sea correcta o incorrectamente, decidió dejar que el usuario decida cuántas marcas adicionales quiere usar una persona. Este camino requiere un programador bastante bueno y una racionalización difícil de seguir. Los apoyo totalmente al permitir esto y al hecho de que lo hacen bien .

Si esos personajes faltaban, por otro lado, me gustaría saber por qué faltaban. ¿Fue una xdecisión de "tiramos esto al piso después de los diacríticos", o fue debido a que los programadores eran demasiado vagos para hacerlo correctamente y potencialmente me exponían a un desbordamiento del búfer con código oculto en los diacríticos que se pasaban a ser ejecutados por ¿el sistema?

El problema simple aquí es que al representar esos caracteres puedo ver que el sistema está haciendo exactamente lo que se le dice que haga, en lugar de hacer lo que cree que es correcto o, lo que es peor, hacer algo potencialmente dañino .

Mokubai
fuente
11
O: ¿Por qué Windows dibuja caracteres horriblemente horribles tan mal?
mtone
Cubrir el texto de otra persona cumple con los criterios de "potencialmente dañino" en mi libro. (Quizás el mensaje que se está cubriendo es importante). Por cierto, mi solución preferida sería alguna forma de recorte en lugar de un límite en el número de diacríticos. (Si realmente hay idiomas que usan caracteres que se superponen con caracteres en líneas adyacentes, ¡no me importa saberlo!)
Harry Johnston
Además: dado que es poco probable que MS cambie este comportamiento en el corto plazo, es probable que Facebook y otros sitios que acepten datos de usuarios intenten desinfectar el conjunto de caracteres para evitar que los bromistas hagan un mal uso de esta "característica". Desafortunadamente, el proceso de desinfección puede tener efectos secundarios indeseables. Si Windows recortara la salida, esto no sería necesario.
Harry Johnston
4

¿Por qué estos personajes se dibujan tan extraños cuando los miras en Windows *?

Debido a que Windows intenta representar una gran cantidad de caracteres de combinación Unicode cuando el texto los contiene, a pesar de que ningún script real combinaría tantas marcas juntas.

RedGrittyBrick
fuente
Presumiblemente, eso significa que Windows "lo está haciendo bien" según lo que realmente se le pide, en lugar de imponer límites sobre cuántos caracteres combinados se pueden usar.
Mokubai
Vea también superuser.com/questions/389333/… que parece indicar que tales trucos han ganado popularidad en Facebook.
Jukka K. Korpela
@Mokubai: lo que pasa es que estos son datos no confiables, datos que provienen de Internet. Windows no necesariamente debe hacer lo que le piden los datos no confiables si no es lo mejor para el usuario.
Harry Johnston
1
@HarryJohnston Estaría más preocupado si no mostrara todos los signos diacríticos, por favor vea mi respuesta.
Mokubai