Чому я не повинен використовувати символи Unicode для імітації типографічних стилів (таких як маленькі шапки чи сценарій)?


129

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

  • Маленькі ковпачки:

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

  • Сценарій:

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

  • Блеклет:

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

Це зумовило інтерес до Stack Exchange (наприклад, тут , тут і тут ) і було висловлено критику щодо таких прийомів. Але що може піти не так, коли я їх використовую?


224
Я читаю це зі свого телефону, і я не бачу останніх двох вигадливих текстів.
Scimonster

22
Оскільки це не читається на деяких пристроях: i.stack.imgur.com/kM73J.png
Chris Kent

15
Оскільки деякі з нас хочуть бачити веб-сторінки у тому, що ми вважаємо читабельними шрифтами (та розмірами, кольорами та c), тому ми використовуємо, наприклад, таблиці стилів CSS користувачів, щоб перекрити авторські стилі. Ви можете зауважити, що, хоча ваші три приклади відображаються на моєму пристрої, мабуть, так само, як ви маєте намір вони з’являтися, для мене вони лише читаються на кордонах. Чому б ви розмістили свою художню тягу над легкістю читання читачів?
jamesqf

38
Ось цікаве спостереження: Edge не може знайти текст у двох останніх зразках, а Chrome не може знайти текст у першому. (Спробуйте Ctrl + F'ing для BEHOLD в обох браузерах.) Firefox не перевірено.
Розкол

22
@Schism Firefox не знаходить жодного з них. Схоже, Chrome, ймовірно, використовує нормалізацію NFKC / NFKD перед пошуком, що розкладає текст сценарію та чорнового тексту на основну латинську мову. Firefox, схоже, не робить цього. Край ... робить щось дивне.
Боб

Відповіді:


224

Загальні

Ці символи призначені не для звичайного латинського алфавіту, а для фонетики, кириличного тексту, для використання в якості математичних символів (представляють змінні) або подібних. Єдиний сумісний з Unicode спосіб кодування тексту в основному латинському алфавіті - це використання символів, які переважно використовуються для цієї мети (тобто з блоку базового латинського Unicode).

Як і у багатьох інших стандартах, вам слід подумати про порушення Unicode. Більше того, Unicode містить стільки систем письма, випадків використання та інших матеріалів, які існують лише для зворотної сумісності з іншими стандартами 1, що повністю розуміючи всі його мотивації - це наука сама по собі. Довга історія, якщо ви дійсно не знаєте, чим займаєтесь, то надзвичайно ймовірно, що щось зламається, про що ви навіть не віддалено думали.

Конкретні приклади

Доступність

Зашифрований текст існує не лише для того, щоб відображатися певним шрифтом. Він також може бути інтерпретований, наприклад, читачами екрану. І зчитувачу екрана не потрібно гадати, чи є

𝓽𝓱𝓮

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

жирний скрипт малий t, жирний сценарій малий h, жирний сценарій малий e

Він не повинен просто говорити “the”, тому що тоді він не буде правильно читати математичні тексти, символи яких трапляються у формі вимовляючого слова. 3

Переносність

Якщо ваш текст добре відображений на вашій машині, це не означає, що він буде і на читацькому. Найбільш очевидний приклад - читач не має жодного шрифту, що підтримує ці символи, або текст надається програмним забезпеченням, яке не підтримує резервні шрифти. Справді, це стає все рідше. Майте на увазі, що деякі люди, як дислексики, потребують спеціальних шрифтів, які мають меншу ймовірність підтримувати цих символів.

Але навіть якщо машина читача використовує лише інший шрифт, це може зробити текст значно менш читабельним. Для першого прикладу це відображається з двома різними шрифтами:

𝓉𝒽ℯ надано за допомогою FreeSerif та STIX

Безкоштовний Serif надає текст так, як ви, мабуть, хочете, щоб він був виведений, використовуючи спеціальні символи для імітації тексту, а саме моделювання рукописного тексту безперервним штрихом. Однак ці символи зроблені для використання в якості математичних символів, з'єднувати які немає сенсу. Отже, візуалізація за допомогою STIX , яка спеціально розроблена для математичних цілей, більше відповідає тому, як ці символи призначені для використання.

У другому прикладі , припустимо, ви або читач чомусь курсивують «сᴜт мій вᴀʀ». З хорошим шрифтом ви отримаєте 4 :

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

Причиною цього є те, що маленькі ковпачки були (частково) змодельовані кириличними літерами, а кирилиця курсивом часом виглядає дуже відмінною від їх вертикальних аналогів . Отже, знову ж таки, це правильна поведінка.

Пошук

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

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

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

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

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

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

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

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


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


Коментарі не для розширеного обговорення; ця розмова переміщена до чату .
Подорожник Geek

1
Що з третім прикладом? Чому текст у форматі Blackletter навіть існує в Unicode, а не лише якийсь шрифт?
posfan12

2
@ posfan12: Він використовується як окремий математичний алфавіт, як символи сценарію. (Зверніть увагу, що приклад нумерації тут не має нічого спільного з пунктами пункту у питанні.)
Wrzlprmft

3
Ваш маленький приклад пропонує загадку / змагання: Знайдіть дійсне речення, яке стане різним реченням, коли воно буде курсивним курсивом ... (обидва трактуються читачами на латинській основі людини)
Хаген фон Ейтцен

67

Що може піти не так? Ну, я бачу це:

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

в Firefox 50.1.0 на Windows 7.

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

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

І користувацькі угоди люб’язно надали ще один приклад:

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



7
@Lilienthal Я вражений тим, скільки років ти повинен пройти, не перевіряючи та не встановлюючи оновлення. Я маю на увазі, я все ще використовую щось на базі Firefox 3.5 на деяких пристроях, але у мене точно немає вибору в цьому питанні (пристрій занадто гарний, але не доступний новіший браузер)
mtraceur

16
@Lilienthal Деякий час у 2020 році для основних номерів версій Firefox можуть знадобитися 64-бітні номери. Незабаром після цього номер версії займе більше місця, ніж фактична програма. У спробі повернути частку ринку, номери версій Chrome для їх зберігання потребуватимуть цілі планети.
Ендрю Мортон

2
Ви, люди, уявляєте, скільки відомих та активних вразливих місць безпеки ви піддаєте, використовуючи такі старовинні браузери?
Зак Ліптон

3
@Zach Lipton: Ти розумієш, що це вниз у списку моїх пріоритетів? №1 має щось, що я можу реально використовувати. Хоча, можливо, люди Firefox (та багато інших) прийняли нову парадигму: безпеку через невикористаність.
jamesqf

29

У мене з цим проблема XY.

Y і X здаються меншими, ніж решта тексту

Тут ми бачимо, що Y і X здаються меншими, ніж решта тексту. При певних рівнях збільшення вони виглядають однакового розміру, але це, мабуть, виявило проблему з цими конкретними гліфами саме в цьому шрифті.


Я можу запропонувати три можливі пояснення того, що ви бачите: 1) Поганий натяк . 2) Резервний шрифт використовується для всіх, крім x і y. 3) Неправильний дизайн шрифту: маленькі кришки були розроблені таким чином, щоб вони були трохи більшими, ніж малі літери (що є правильним вибором), а потім використовувались для фонетичних та кириличних символів Unicode - що не є хорошим вибором, оскільки, наприклад, у фонетичному використанні ці символи повинні гармонізувати з основними латинськими символами. - Так чи інакше: бали 1) та 3) не є наслідком зловживання Unicode. Пункт 2) вже розглянуто в інших відповідях.
Wrzlprmft

12
@Wrzlprmft: За визначенням вони зловживають unicode, оскільки у unicode немає маленьких ковпачків. Унікод має букви, які виглядають як маленькі ковпачки в блоках фонетичних алфавітів та латинському блоці Extended-D. Зокрема, ні два фонетичні блоки, ні латинський блок Extended-D не містять літери, схожі на маленькі літери X , тому я здогадуюсь, що X походить десь з іншого місця, ймовірно, з кириличного блоку. Різниця викликана ні 1, 2, ні 3. Це викликано буквою, що належить до іншого алфавіту.
slebetman

@slebetman: Малі ковпачки x - це просто звичайний малий x (ви можете просто скопіювати персонаж із запитання та оглянути його самостійно). І малий х повинен узгоджуватися з фонетичними символами, оскільки він також використовується як фонетичний символ. Він також повинен мати таку ж висоту, що й символи малих літер кирилиці, оскільки ви не хочете, щоб окремі слова кирилиці виділялися з латинського тексту (і навпаки).
Wrzlprmft

19
Оголошено за лол на "XY problem" :)
Ендрю Мортон

13

Використання нелатинських символів, які начебто схожі на латинські, ставить вас у компанію спамерів, порномоніарів та хто-хто знає, що вони - до розбирачів, які хочуть, щоб їхній текст був нерозбірливим, нерозбірливим і підлягає відновленню. ("Я ніколи не говорив, що це безпечно! Я сказав, що це сигма-альфа-інтеграл-знак-епізон !!! Не можу мене судити !!!")

Якщо ви зручні в цьому клубі, тоді займіться цим.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.