Разница в отображении шрифта Unicode в Firefox, Chrome и Safari

Я работал над импортом содержимого из некоторых файлов, когда столкнулся с этой проблемой. Некоторые символы Юникода неправильно отображаются в Chrome и Safari (в Firefox нет проблем).

Рассматриваемый символ: र्इ

Скриншоты из каждого браузера ниже:

FirefoxFirefox

ChromeChrome

SafariСафари

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

Чем это вызвано? Это связано с недопустимыми символами или проблемой со шрифтом на странице?

Проблема только с несколькими персонажами. Большая часть контента прекрасно отображается во всех браузерах.


person TheKalpit    schedule 05.03.2019    source источник


Ответы (1)


Глиф деванагари र्इ – это лигатура, состоящая из трех символов Юникода:

  1. (U+0930) Деванагари Письмо Ра
  2. (U+094D) Знак Деванагари Вирама
  3. (U+0907) Деванагари Письмо I

Второй из них, Virama, является диакритическим знаком, используемым для обозначения того, что гласный звук, который обычно часть произношения буквы, к которой она присоединяется, должна быть подавлена ​​в речи. Когда сочетается с этим диакритическим знаком, результирующая буква выглядит следующим образом: र्.

Многие пары букв деванагари могут объединяться в лигатуры. В латинице лигатуры обычно похожи на буквы, из которых они состоят — например, æ легко распознается как комбинация a и e — но это не всегда так: амперсанд & возникла как лигатура для et, например.

В найденном примере сочетание र् и может быть записано как र्‌इ или र्इ. 1 … значение идентично, и оба они понятны читателям письма деванагари.

Итак, и Firefox, и Safari правильно отображают символы. Chrome — нет, что может быть связано с используемым шрифтом или с самим Chrome.


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

person Zero Piraeus    schedule 09.03.2019
comment
Спасибо. Это помогло в некоторой степени понять проблему. Я не знал о лигатуре до сих пор! Я обнаружил, что столкнулся с этой проблемой только с двумя буквами, поэтому сейчас я запускаю функцию замены перед сохранением текста в БД. Функция замены в основном заменяет все вхождения र्इ (лигатура, ошибочная) на ई (очевидно, одиночный символ Юникода). Поскольку лигатура не отображается последовательно во всех браузерах, это кажется единственным решением. Что ты посоветуешь? - person TheKalpit; 16.03.2019
comment
Я бы выполнил замену, когда вы визуализируете текст (т.е. непосредственно перед его отправкой в ​​браузер), а не при его сохранении, потому что последнее разрушительно. После того, как вы заменили символы в базе данных, это невозможно отменить, не заменив также то, что уже было одиночным символом ई в исходном тексте, на лигатуру र्इ. Обратите внимание, что, согласно Консорциуму Unicode, र्इ и ई не идентичны по значению, а просто можно спутать (так же, как 0 и O можно спутать в латинице). - person Zero Piraeus; 16.03.2019