Почему некоторые персонажи рисуют ужасно, ужасно неправильно в Windows?

16

Странные символы:

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

Вопрос: Почему эти символы выглядят так странно, когда вы смотрите на них в Windows *?

Вот фрагмент из Outlook для вас, счастливчиков, которые не вынуждены использовать Windows:

дрянь

Связанный: Какая кодировка символов используется?

* Windows как в ОС. Приложения, рисующие текст с использованием GTK + и подобных, не показывают, что что-то из LSD-поездки пошло не так .

Маркус Ханссон
источник
Вы хотите сказать, что на вашем компьютере с Windows символы, введенные вами в вопросе, выглядят как символы на картинке? Потому что напечатанные символы отлично смотрятся на моем компьютере с Windows.
Дсолимано
1
Ваш вопрос содержит необоснованную претензию - что Windows рисует их "неправильно". Было бы полезно, если бы вы указали, как вы думаете, что они должны быть нарисованы, и что конкретно не так с тем, как Windows рисует их.
Дэвид Шварц
2
Мне было бы любопытно посмотреть, как другие ОС справляются с этим, я вижу только то, как это делает Windows, и мне это кажется "правильным".
Мокубай
1
Также связано: en.wikipedia.org/wiki/Combining_character
iglvzx

Ответы:

10

Поскольку я, кажется, немного удивился, подумав, что Windows «делает все правильно», я чувствую, что должен опубликовать ответ, чтобы оправдать свою позицию.

В том-то и дело, что у вас есть текст, который говорит операционной системе рендерить безумное количество комбинируемых символов. Проблема в том, что одна операционная система фактически отображает их, а другая - нет, связана с рядом проблем. Одна из этих проблем заключается в том, насколько тщательными были программисты, когда они писали код для их визуализации, а другая - из-за того, что программисты слишком ленивы, чтобы реализовать их должным образом, если вообще вообще.

По сути, все сводится к идее, что письменные языки являются текучими вещами, и что многие символы в определенных языках имеют несколько различных диакритических знаков, которые применяются для изменения произношения символов. Как мы справляемся со всеми этими диакритическими знаками, даем ли мы каждой букве с диакритическим знаком новый символ (что приведет к одному черту из множества новых и почти идентичных символов), или мы создаем набор символов специально для диакритических знаков и сокращаем наш общий алфавит?

Unicode дает нам возможность сделать и то и другое, но при этом программистам, которые должны отображать эти диакритические знаки, приходится иметь дело с тем фактом, что есть некоторые символы, которые на самом деле имеют несколько диакритических знаков, один выше и один ниже, а затем программист имеет задать вопрос только когда они останавливаются. Они могли бы ограничить его до двух и удовлетворить большинство людей, но игнорировать тех, кто хочет или нуждается в трех диакритических знаках, чтобы формально писать на своем родном языке.

Правильно или неправильно Microsoft решила позволить пользователю решать, сколько дополнительных отметок человек хочет использовать. Этот путь требует довольно хорошего программиста и некоторой жесткой рационализации. Я полностью поддерживаю их как в разрешении этого, так и в том, что они делают это хорошо .

С другой стороны, если бы эти персонажи отсутствовали, я бы хотел знать, почему они отсутствовали. Было ли это xрешение «мы бросаем это на пол после диакритики», или это было из-за того, что программисты были слишком ленивы, чтобы делать это должным образом и потенциально подвергали меня некоторому переполнению буфера с кодом, скрытым в диакритиках, который передавался для выполнения система?

Простая проблема заключается в том, что, фактически выполняя рендеринг этих символов, я вижу, что система делает именно то, что ей говорят, вместо того, чтобы делать то, что она считает правильным, или, что еще хуже, делать что-то потенциально опасное .

Мокубай
источник
11
Или: почему Windows так хорошо рисует ужасно неправильные символы?
Mtone
Перекрытие чужого текста соответствует критериям «потенциально вредного» в моей книге. (Возможно, важно скрыть сообщение.) Между прочим, моим предпочтительным решением будет некоторая форма отсечения, а не ограничение количества диакритических знаков. (Если есть действительно языки, которые используют символы, которые перекрываются с символами на смежных строках, я не хочу об этом знать!)
Гарри Джонстон
Далее: поскольку MS вряд ли изменит это поведение в ближайшее время, Facebook и другие сайты, которые принимают пользовательские данные, скорее всего, попытаются очистить набор символов самостоятельно, чтобы не допустить злоупотребления этой «функцией» шутниками. К сожалению, процесс очистки может иметь нежелательные побочные эффекты. Если Windows обрезает вывод, в этом нет необходимости.
Гарри Джонстон
4

Почему эти символы выглядят так странно, когда вы смотрите на них в Windows *?

Потому что Windows пытается отобразить большое количество символов, объединяющих Unicode, когда ваш текст содержит их, даже если ни один из реальных сценариев не объединит столько знаков вместе.

RedGrittyBrick
источник
Предположительно, это означает, что Windows «делает все правильно» в соответствии с тем, что на самом деле запрашивается, вместо того, чтобы налагать ограничения на количество комбинируемых символов.
Мокубай
См. Также superuser.com/questions/389333/…, который, кажется, указывает на то, что такие трюки завоевали популярность в Facebook.
Юкка К. Корпела
@Mokubai: дело в том, что это ненадежные данные - данные, поступающие из Интернета. Windows не обязательно должна делать то, что от нее требуют ненадежные данные, если это не отвечает интересам пользователя.
Гарри Джонстон
1
@HarryJohnston Я бы больше волновался, если бы не все диакритические знаки, пожалуйста, посмотрите мой ответ.
Мокубай