2012-12-05 13 views
18

Załóżmy, że mamy tekst zawierający znak Unicode, którego nie można wyświetlić, ponieważ nasza czcionka nie ma odpowiadającego glifu. Zwykle wyświetlany jest zamiast tego symbol zastępczy, np. prostokątny blok (patrz zrzut ekranu).Czy znaleziono znak "glyph not found"?

Czy istnieje znak "glyph not found", który niezawodnie produkuje ten glif? Chciałbym napisać coś w rodzaju interfejsu użytkownika: "If the following text contains <insert character here> then you need another font...".

Nawiasem mówiąc, nie mówię o (replacement character). Ten jest wyświetlany, gdy znak Unicode nie może zostać poprawnie zdekodowany ze strumienia danych. To nie musi produkować ten sam glif:

enter image description here

+0

Prostokąt ** to ** "glyph not found" glyph. Nie pomóż. –

Odpowiedz

7

Nie, nie ma znaku "glyph not found". Różne programy używają różnych prezentacji graficznych. Pusty wąski prostokąt jest wspólnym renderingiem, ale nie jedynym. Może to być również prostokąt ze znakiem zapytania w nim lub z kodem znaku, w postaci szesnastkowej.

Lepiej jest np. wyświetlać mały obraz postaci wraz z samym znakiem, aby czytelnik mógł je porównać.

+0

Na kilku telefonach z Androidem brakuje glifów z zaledwie kilkoma pikselami pustego miejsca. Więc nie musi to być nawet coś, co jest widoczne. – nibarius

3

Charakter glif-not-found jest określona przez silnik czcionki i czcionki; nie ma dla niego stałego charakteru.

+0

Pytanie wyraźnie mówi, że nie chodzi o znak zastępczy, a CHARAKTER REPLACEMENT U + FFFD * jest * stałym znakiem (nie ma ustalonego glifu, chociaż czcionki, które go zawierają, mają tendencję do używania bardzo podobnych glifów). –

+0

@Jukka: Chyba że nie mówię też o U + FFFD. –

+1

Następnie nie używaj wyrażenia "znak zastępczy", ponieważ a) w ogóle nie jest postacią, oraz b) w szczególności nie jest postacią z nazwą Unicode WYMIANA CHARAKTERA, c) ludzie łatwo wpadają w pomieszanie z takimi problemami. –

2

Użyj znaku, takiego jak U + 10FFFF (na samym końcu przestrzeni Unicode), który wynosi 99,99%, którego nie można znaleźć w tabeli cmap żadnej z normalnych czcionek. Przynajmniej żadna znana czcionka systemu Windows nie jest mapowana do glifu, a czcionka systemu Linux/Mac jest wysoce nieprawdopodobna. Nawet cała czcionka Last Resort (http://www.unicode.org/policies/lastresortfont_eula.html) nie jest mapowana. Tak więc, podczas gdy nie ma oficjalnego znaku "glyph not found" zdefiniowanego w Unicode, który zostanie odwzorowany na glify .notdef, powyższy non-character jest w praktyce gwarantowany do wyświetlania tego glifu, niezależnie od tego, jaki jest wzór glifu w danej czcionce. Glif .notdef (glyph id 0 w OpenType) może być prostym pustym prostokątem (standard), pudełkiem z x, pudełkiem ze znakiem zapytania, pustym sporadycznie (co jest złym zwyczajem), a czasami dziwacznymi rzeczami, takimi jak spirale (w Linatino Palatino) .

10

Z Spec Unicode:

U+25A1 □ biały kwadrat

  • może być używany do reprezentowania brakujących ideogram

  • U+20DE $ ⃞ łącząc załączając kwadratowy

+0

Wycofałem twoją edycję z odpowiedzi Jukki K. Korpela. Podaj te informacje w tej odpowiedzi i/lub dodaj komentarz do drugiej odpowiedzi. –

+0

Dlaczego po prostu nie zawrzeć tych informacji i usunąć tę odpowiedź? – Michaelangel007

+0

Dobra odpowiedź. Wcześniejsze – martin

0

Unicode używa tych pojęć:

  • wymiana glif
  • brakuje glif
  • zinterpretować ale unrenderable charakter

standard Unicode (10,0) robi nie określać, jak mają wyglądać, ale sugeruje to w c Rozdział 5.3 [PDF], że implementacje wyświetlić

[...] charakterystyczne znaki, które dają pewne ogólne wskazanie ich rodzaju [...]

aby odróżnić je od "nieprzypisanych punktów kodowych". dają kilka przykładów:

Unicode glossary entry says:

Często jest pokazane jako otwarty i czarnego prostokąta.


tl; dr: Nie ma znormalizowany wygląd/glif, to do wykonania. Aby pomóc użytkownikom, implementacje mogą wyświetlać glify wskazujące, jakiego typu znaku nie można wyświetlić.

Powiązane problemy