Есть ли символ не найденного символа?

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

Есть ли символ «глиф не найден», который надежно создает этот глиф? Я хотел бы написать что-то вроде "If the following text contains <insert character here> then you need another font..." в пользовательском интерфейсе.

Кстати, я не говорю о � (замещающем символе). Он отображается, когда символ Unicode не может быть правильно декодирован из потока данных. Это не обязательно создает один и тот же глиф:

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


person Sebastian Negraszus    schedule 05.12.2012    source источник
comment
Прямоугольник глиф не найден. Не помогай.   -  person Hans Passant    schedule 05.12.2012
comment
Хотя есть много отличных ответов относительно глифа, который не найден, это не поможет вам на самом деле его обнаружить, поскольку текстовая строка в коде по-прежнему будет содержать символ независимо от шрифта, используемого для его визуализации. Я думаю, что в некоторых библиотеках рендеринга есть возможность запрашивать шрифт, но я понятия не имею, насколько это стандартно.   -  person Deanna    schedule 12.10.2020


Ответы (8)


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

Так что лучше, например, покажите небольшое изображение персонажа вместе с самим персонажем, чтобы читатель мог их сравнить.

person Jukka K. Korpela    schedule 05.12.2012
comment
На некоторых телефонах Android отсутствующие глифы отображаются с помощью всего лишь нескольких пикселей пустого пространства. Так что это даже не обязательно должно быть что-то видимое. - person nibarius; 15.11.2015

Из спецификации Unicode:

U+25A1 □ БЕЛАЯ ПЛОЩАДЬ

  • может использоваться для обозначения отсутствующей идеограммы

  • U+20DE $ ⃞ объединяющий квадрат

person Michaelangel007    schedule 01.10.2015
comment
Я откатил вашу правку до ответа Юкки К. Корпелы. Пожалуйста, включите эту информацию в этот ответ и / или добавьте комментарий к другому ответу. - person Sebastian Negraszus; 05.10.2015
comment
Почему бы просто не включить туда информацию и не удалить этот ответ? - person Michaelangel007; 06.10.2015

Символ «не найденный глиф» определяется механизмом шрифтов и шрифтом; для него нет фиксированного символа.

person Ignacio Vazquez-Abrams    schedule 05.12.2012
comment
В вопросе четко сказано, что речь идет не о символе замены, а о том, что REPLACEMENT CHARACTER U + FFFD является фиксированным символом (у него нет фиксированного глифа, хотя шрифты, которые его содержат, как правило, используют очень похожие глифы. ). - person Jukka K. Korpela; 06.12.2012
comment
@Jukka: Вот только я тоже не говорю о U + FFFD. - person Ignacio Vazquez-Abrams; 06.12.2012
comment
Тогда не используйте фразу «замещающий символ», потому что а) это вообще не символ, и б) это конкретно не символ с именем Unicode REPLACEMENT CHARACTER, и в) люди легко запутаются в подобных проблемах. - person Jukka K. Korpela; 06.12.2012

Используйте не символ, например U + 10FFFF (в самом конце пространства Unicode), который с вероятностью 99,99% не будет найден в таблице cmap любого разумного шрифта. По крайней мере, ни один известный системный шрифт Windows не отображает этот несимвольный символ в глиф, и маловероятно, что любой системный шрифт Linux / Mac тоже. Даже всеобъемлющий шрифт Last Resort (http://www.unicode.org/policies/lastresortfont_eula.html) не отображает его. Таким образом, хотя в Юникоде не существует официального символа «глиф не найден», который будет отображаться на глиф .notdef, на практике гарантируется, что вышеуказанный несимвол будет отображать этот глиф, независимо от дизайна глифа в этом конкретном шрифте. Глиф .notdef (идентификатор глифа 0 в OpenType) может быть простым полым прямоугольником (стандарт), прямоугольником с x, прямоугольником с вопросительным знаком, иногда пустым (что является плохой практикой), а иногда и странными вещами, такими как спирали (в Palatino Linotype) .

person Dwayne Robinson    schedule 05.07.2013

Кроме того, (насколько я знаю) японский язык использует GETA MARK 〓 U + 3013.

Символы и знаки препинания CJK

person martin    schedule 15.02.2016

В Unicode используются следующие термины:

  • заменяющий глиф
  • отсутствующий глиф
  • интерпретируемый, но непередаваемый персонаж

Стандарт Юникода (10.0) не определяет, как они должны выглядеть, но он предлагает в главе 5.3 [PDF], который отображает реализации

[…] Характерные глифы, которые дают общее представление об их типе […]

чтобы отличить их от «неназначенных кодовых точек». Они приводят несколько примеров:

В глоссарии Unicode говорится:

Часто отображается в виде открытого или черного прямоугольника.


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

person unor    schedule 20.10.2017

Есть символ notdef, который означает, что глиф не найден. Но у него нет кодировки. Вы можете использовать коды управляющих символов для вставки символа notdef (например, "", U + 0002)

person Migats21    schedule 20.10.2018
comment
Похоже, этот символ не может быть опубликован в stackoverflow - person Migats21; 20.10.2018

Не найденный глиф может иметь 3 возможных символа.

См. Спецификацию Microsoft, раздел Форма глифа .notdef, https://docs.microsoft.com/en-us/typography/opentype/otspec170/recom#shape-of-notdef-glyph

person Lahiru    schedule 21.11.2016