Почему я не должен использовать символы Юникода для имитации типографских стилей (таких как маленькие заглавные буквы или сценарий)?

129

Юникод содержит различные символы, которые выглядят как типографские стилизованные варианты символов основного латинского алфавита и позволяют писать тексты в соответствующих типографских стилях, не прибегая к разметке или аналогичным. Например, можно смоделировать:

  • Маленькие заглавные буквы:

    ꜰᴀɴᴄɪʟ ᴛʜɪꜱ ꜰᴀɴᴄɪʟy ᴇɴᴄᴏᴅᴇᴅ ᴛᴇxᴛ.

  • Автор сценария:

    𝓽𝓮𝔁𝓽 𝓽𝓱𝓲𝓼 𝓯𝓪𝓷𝓬𝓲𝓵𝔂 𝓮𝓷𝓬𝓸𝓭𝓮𝓭 𝓽𝓮𝔁𝓽.

  • Blackletter:

    𝖙𝖊𝖝𝖙 𝖙𝖍𝖎𝖘 𝖋𝖆𝖓𝖈𝖎𝖑𝖞 𝖊𝖓𝖈𝖔𝖉𝖊𝖉 𝖙𝖊𝖝𝖙.

Это вызвало интерес к обмену стеками (например, здесь , здесь и здесь ), и была высказана критика таких методов. Но что может пойти не так, когда я их использую?

Wrzlprmft
источник
224
Я читаю это со своего телефона и не вижу последних двух красивых текстов.
Scimonster
22
Потому что это нечитаемо на некоторых устройствах: i.stack.imgur.com/kM73J.png
Крис Кент,
15
Поскольку некоторые из нас хотят видеть веб-страницы в том, что мы считаем читаемыми шрифтами (и размерами, цветами и т. Д.), Мы используем, например, пользовательские таблицы стилей CSS для переопределения стилей автора. Вы можете заметить, что, хотя ваши три примера отображаются на моем устройстве, очевидно, так же, как вы и предполагали, что они появятся, для меня они только для чтения на границе. Почему вы ставите свои художественные пристрастия выше легкости чтения ваших читателей?
jamesqf
38
Вот интересное наблюдение: Edge не может найти текст в последних двух примерах, а Chrome не может найти текст в первом. (Попробуйте Ctrl + F для BEHOLD в обоих браузерах.) Не проверял Firefox.
Раскол
22
@ Schism Firefox не находит ни одного из них. Похоже, что Chrome, вероятно, использует нормализацию NFKC / NFKD перед поиском, что приводит к разложению текста сценария и черного текста в базовую латиницу. Firefox, похоже, не делает этого. Эдж ... делает что-то странное.
Боб

Ответы:

224

Генеральная

Эти символы предназначены не для обычного текста на латинском алфавите, а для фонетики, текста на кириллице, для использования в качестве математических символов (представляющих переменные) или аналогичных. Единственный Unicode-совместимый способ кодирования текста в основном латинском алфавите - это использование символов, преимущественно используемых для этой цели (т. Е. Из блока Basic Latin Unicode).

Как и во многих других стандартах, вы должны дважды подумать о нарушении Unicode. Более того, Unicode включает в себя так много систем записи, вариантов использования и всего, что просто существует для обратной совместимости с другими стандартами 1, что полное понимание всех его мотивов является собственной наукой. Короче говоря, если вы действительно не знаете, что делаете, очень вероятно, что что-то сломается, о чем вы даже не думали.

Конкретные примеры

доступность

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

𝓽𝓱𝓮

это определенная статья или математическое произведение 2 переменных 𝓽, 𝓱 и 𝓮 - для этого и создаются эти символы. Таким образом, наилучшим поведением будет то, что в нем прописаны эти символы, например, буквально произнесено следующее:

жирный шрифт small t, жирный шрифт small h, жирный шрифт small e

Вместо этого он должен просто сказать «the», потому что тогда он не будет правильно читать математические тексты, символы которых образуют произносимое слово. 3

портативность

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

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

𝓉𝒽ℯ отображается с помощью FreeSerif и STIX

Free Serif отображает текст так, как вы, вероятно, хотели бы, чтобы он отображался при использовании специальных символов для имитации текста, а именно имитации рукописного ввода непрерывным штрихом. Однако эти символы предназначены для использования в качестве математических символов, связывать которые не имеет смысла. Следовательно, рендеринг STIX , специально разработанный для математических целей, больше соответствует тому, как эти символы предназначены для использования.

Во втором примере предположим, что вы или читатель выделены курсивом «сᴜт мy ᴀʀ» по какой-то причине. С хорошим шрифтом вы получите 4 :

сᴜт мой ᴀʀ вынесен вертикально и курсивом.  курсив читается как "кончи мой бар"

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

возможности поиска

В качестве первого примера рассмотрим, что вы хотели бы, чтобы разумный поиск делал с символом 𝒲 (математический сценарий W ). Предположим, что поиск имеет два режима: режим по умолчанию и точный режим (обычно называемый регистрозависимым ). Этот персонаж должен быть:

  • найдено при поиске w или W в режиме по умолчанию - для тех, кто не хочет вводить или вставлять специальный символ в поле поиска;

  • найдено при поиске 𝒲 в точном режиме - для тех, кто хочет искать, где соответствующая переменная упоминается в математическом документе³;

  • не найден при поиске 𝓌, w или W в точном режиме из-за нарушения поиска, аналогичного описанному выше.

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

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

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

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


+1  Вы знаете, что XKCD о неизбежном провале унификации стандартов ? Ну, Юникод удался.
2  или любой другой пустой оператор в соответствующем соглашении
3  Я знаю, что в настоящее время очень немногие математические тексты поддерживают эту кодировку или что-то совместимое с ней, но дело в том, что когда-нибудь они, надеюсь, сделают. Ваш текст, злоупотребляющий Юникодом, может все еще быть рядом и читать тогда.
4  Если вы не локализуетесь для македонского или сербского, в котором вы получите другой, но все же нежелательный результат.

Wrzlprmft
источник
Комментарии не для расширенного обсуждения; этот разговор был перемещен в чат .
Подмастерье Компьютерщик
1
Как насчет третьего примера? Почему черный текст даже существует в Unicode, а не какой-то шрифт?
posfan12
2
@ posfan12: он используется как отдельный математический алфавит - как символы сценария. (Обратите внимание, что нумерация примеров здесь не имеет ничего общего с пунктами в вопросе.)
Wrzlprmft
3
Ваш пример с маленьким cpas предлагает загадку / Competitoin: найдите правильное предложение, которое становится другим предложением, когда оно выделено курсивом ... (оба интерпретируются, скажем, латиноамериканскими читателями-людьми)
Хаген фон Эйтцен
67

Что может пойти не так? Ну, я вижу это:

введите описание изображения здесь

в Firefox 50.1.0 на Windows 7.

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

введите описание изображения здесь

И пользователи oals любезно предоставили еще один пример:

введите описание изображения здесь

Эндрю Мортон
источник
9
Меня? i.stack.imgur.com/lWRAa.png
oals
7
@Lilienthal Я впечатлен тем, сколько лет вы прошли без проверки и установки обновлений. Я имею в виду, что я все еще использую что-то на основе Firefox 3.5 на некоторых устройствах, но у меня точно нет выбора в этом вопросе (устройство слишком хорошее, но более новый доступный для использования браузер не доступен)
mtraceur
16
@Lilienthal Когда-то в 2020 году для основных версий Firefox могут потребоваться 64-разрядные номера. Вскоре после этого номер версии займет больше места, чем сама программа. В попытке вернуть себе долю рынка, номерам версий Chrome понадобятся целые планеты для их хранения.
Эндрю Мортон
2
Вы, ребята, знаете, сколько известных и активных уязвимостей безопасности вы подвергаете себя, используя такие древние браузеры?
Зак Lipton
3
@ Зак Липтон: Ты понимаешь, что это далеко внизу списка моих приоритетов? # 1 есть что-то, что я действительно могу использовать. Хотя, возможно, люди из Firefox (и многие другие) приняли новую парадигму: безопасность через непригодность.
jamesqf
29

У меня с этим проблема XY.

Y и X выглядят меньше, чем остальная часть текста

Здесь мы видим, что Y и X выглядят меньше, чем остальная часть текста. При определенных уровнях масштабирования они выглядят одинакового размера, но это, похоже, выявило проблему с этими конкретными символами в этом конкретном шрифте.

Майкл Хэмптон
источник
Я могу предложить три возможных объяснения того, что вы видите: 1) Плохой намек . 2) Резервный шрифт используется для всего, кроме x и y. 3) Плохой дизайн шрифта: маленькие заглавные буквы были разработаны, чтобы быть немного больше чем строчные буквы (который является допустимым выбором) и затем использовались для фонетических и кириллических символов Unicode - который не является хорошим выбором, так как, например, в фонетическом использовании эти символы должны гармонировать с основными латинскими буквами. - В любом случае: пункты 1) и 3) не являются следствием злоупотребления Юникодом. Пункт 2) уже рассматривается в других ответах.
Wrzlprmft
12
@Wrzlprmft: по определению они являются юникодами, потому что у них нет маленьких заглавных букв. У юникода есть буквы, которые выглядят как маленькие заглавные буквы в блоках фонетического алфавита и в блоке Latin Extended-D. В частности, ни в двух фонетических блоках, ни в латинском блоке Extended-D нет буквы, которая выглядит как маленькие заглавные буквы X , поэтому я предполагаю, что X исходит откуда-то еще, возможно, из кириллического блока. Разница вызвана ни 1, 2, ни 3. Это вызвано буквой, принадлежащей другому алфавиту.
slebetman
@slebetman: маленькие заглавные буквы x - это обычные строчные буквы x (вы можете просто скопировать символ из вопроса и проверить его самостоятельно). И строчная буква x должна гармонировать с фонетическими символами, потому что она также используется в качестве фонетического символа. Он также должен иметь ту же высоту, что и строчные буквы кириллицы, так как вы не хотите, чтобы отдельные слова кириллицы выделялись из латинского текста (и наоборот).
Wrzlprmft
19
Проголосовал за LOL на "XY проблемы" :)
Эндрю Мортон
13

Использование нелатинских символов, своего родом-Сорт похожи на латинских ставит вас в компании спамеры, pornmongers, и кто знает что-они-вверх-к лицемерам, которые хотят, чтобы их текст непостижим, unindexable и repudiatable. («Я никогда не говорил, что это безопасно! Я сказал, что это был сигма-альфа-интеграл-знак-эпизод !!!

Если вам удобно в этом клубе, тогда сделайте это.

CCTO
источник