Dlaczego niektóre postacie rysują okropnie, strasznie źle w systemie Windows?

16

Dziwne znaki:

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

Pytanie: Dlaczego te postacie rysują tak dziwnie, gdy patrzysz na nie w systemie Windows *?

Oto fragment z programu Outlook dla szczęśliwych drani, którzy nie są zmuszeni do korzystania z systemu Windows:

Rzeczy

Powiązane: Jakie jest używane kodowanie znaków?

* Windows jak w systemie operacyjnym. Aplikacje rysujące tekst za pomocą GTK + i podobnych nie pokazują tego, jak coś z podróży LSD poszło nie tak .

Marcus Hansson
źródło
Czy mówisz, że na komputerze z systemem Windows znaki wpisane w pytaniu wyglądają jak znaki na obrazie? Ponieważ wpisane znaki wyglądają dobrze na moim komputerze z systemem Windows.
dsolimano
1
Twoje pytanie zawiera bezpodstawne twierdzenie - że system Windows rysuje je „źle”. Byłoby to pomocne, gdybyś stwierdził, w jaki sposób powinny być narysowane, a co konkretnie jest nie tak ze sposobem, w jaki Windows je rysuje.
David Schwartz
2
Byłbym ciekawy, jak radzą sobie z tym inne systemy operacyjne, widzę tylko, jak robi to Windows i wydaje mi się to „właściwe”.
Mokubai
1
Powiązane również: en.wikipedia.org/wiki/Combining_character
iglvzx

Odpowiedzi:

10

Ponieważ wydaje mi się, że trochę uderzyłem, myśląc, że Windows „robi to dobrze”, uważam, że powinienem opublikować odpowiedź, aby uzasadnić swoją pozycję.

Faktem jest, że tekst, który masz, mówi systemowi operacyjnemu, aby renderował niesamowitą ilość łączonych znaków. Problem, który jeden system operacyjny faktycznie renderuje, a inny nie, wynika z wielu problemów. Jednym z tych problemów jest to, jak dokładni byli programiści, kiedy pisali kod, aby je renderować, inny byłby spowodowany tym, że programiści byli zbyt leniwi, aby je właściwie wdrożyć, jeśli w ogóle.

Zasadniczo sprowadza się to do tego, że języki pisane są płynnymi rzeczami i że wiele znaków w niektórych językach ma wiele różnych znaków diakrytycznych, które stosuje się w celu modyfikacji wymowy znaków. Jak radzimy sobie z tymi wszystkimi znakami diakrytycznymi, czy nadajemy każdej literze znak diakrytyczny nowy znak (co skutkowałoby jedną dużą liczbą nowych i prawie identycznych znaków), czy też tworzymy zestaw znaków specjalnie dla znaków diakrytycznych i zmniejszamy nasz ogólny alfabet?

Unicode daje nam możliwość zrobienia obu tych rzeczy, ale robiąc to, programiści, którzy muszą wyrenderować te znaki diakrytyczne, muszą poradzić sobie z faktem, że niektóre znaki mają wiele znaków diakrytycznych, jeden powyżej i jeden poniżej, a następnie programista ma zadać pytanie, kiedy przestaną. Mogą ograniczyć go do dwóch i zadowolić większość ludzi, ale zignorować tych, którzy chcą lub potrzebują trzech znaków diakrytycznych, aby formalnie pisać w swoim własnym języku.

Microsoft, czy to słusznie, czy nie, postanowił pozwolić użytkownikowi zdecydować, ile dodatkowych znaków osoba chce użyć. Ta ścieżka wymaga raczej dobrego programisty i trudnej racjonalizacji. W pełni ich popieram, zarówno pozwalając na to, jak i na to, że robią to dobrze .

Z drugiej strony, gdyby te postacie zaginęły, chciałbym wiedzieć, dlaczego ich nie ma. Czy była to decyzja „upuszczamy to na podłogę po xznakach diakrytycznych”, czy może dlatego, że programiści byli zbyt leniwi, aby zrobić to właściwie i potencjalnie narażali mnie na przepełnienie bufora z kodem ukrytym w znakach diakrytycznych, który został wydany do wykonania przez system?

Prostym problemem jest to, że poprzez renderowanie tych postaci widzę, że system robi dokładnie to, co mu polecono, zamiast robić to, co uważa za słuszne, lub, co gorsza, robi coś potencjalnie szkodliwego .

Mokubai
źródło
11
Lub: Dlaczego Windows tak dobrze rysuje okropnie złe postacie?
mtone
Zakrycie cudzego tekstu spełnia w mojej książce kryteria „potencjalnie szkodliwe”. (Być może przesłanie jest ukryte jest ważne.) Nawiasem mówiąc, moim preferowanym rozwiązaniem byłaby jakaś forma przycinania, a nie ograniczenie liczby znaków diakrytycznych. (Jeśli naprawdę istnieją języki, w których znaki przylegają do znaków w sąsiednich wierszach, nie chcę się o tym dowiedzieć!)
Harry Johnston
Ponadto: ponieważ stwardnienie rozsiane prawdopodobnie nie zmieni tego zachowania w najbliższym czasie, Facebook i inne strony, które akceptują dane użytkownika, prawdopodobnie będą próbowały same oczyścić zestaw znaków, aby zapobiec nadużywaniu tej „funkcji” przez dowcipnisiów. Niestety proces odkażania może mieć niepożądane skutki uboczne. Jeśli system Windows obciął dane wyjściowe, nie byłoby to konieczne.
Harry Johnston,
4

Dlaczego te znaki rysują tak dziwnie, gdy patrzysz na nie w systemie Windows *?

Ponieważ system Windows próbuje renderować dużą liczbę znaków Unicode łączących znaki, gdy tekst je zawiera, nawet jeśli żaden rzeczywisty skrypt nigdy nie połączyłby tylu znaków razem.

RedGrittyBrick
źródło
Przypuszczalnie oznacza to, że Windows „robi to dobrze” zgodnie z tym, o co się go pyta, a nie nakłada ograniczeń na liczbę łączonych znaków.
Mokubai
Zobacz także superuser.com/questions/389333/…, który wydaje się wskazywać, że takie sztuczki zyskały popularność na Facebooku.
Jukka K. Korpela
@Mokubai: chodzi o to, że są to niezaufane dane - dane pochodzące z Internetu. Windows niekoniecznie powinien robić to, o co proszą niezaufane dane, jeśli może to nie leżeć w najlepszym interesie użytkownika.
Harry Johnston,
1
@HarryJohnston Byłbym bardziej zmartwiony, gdyby nie pokazywał wszystkich znaków diakrytycznych, proszę zobaczyć moją odpowiedź.
Mokubai