Dlaczego nie powinienem używać znaków Unicode do symulacji stylów typograficznych (takich jak małe litery lub skrypt)?

129

Unicode zawiera różne znaki, które wyglądają jak typograficznie stylizowane warianty znaków podstawowego alfabetu łacińskiego i które pozwalają na pisanie tekstów w odpowiednich stylach typograficznych bez uciekania się do znaczników lub podobnych. Na przykład można symulować:

  • Małe czapki:

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

  • Scenariusz:

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

  • Biuletyn:

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

To spotkało się z zainteresowaniem na Stack Exchange (np. Tutaj , tutaj i tutaj ) i pojawiła się krytyka takich technik. Ale co może pójść nie tak, kiedy ich używam?

Wrzlprmft
źródło
224
Czytam to z mojego telefonu i nie widzę dwóch ostatnich wymyślnych tekstów.
Scimonster,
22
Ponieważ jest nieczytelny na niektórych urządzeniach: i.stack.imgur.com/kM73J.png
Chris Kent
15
Ponieważ niektórzy z nas chcą widzieć strony internetowe w czcionkach, które uważamy za czytelne (oraz w rozmiarach, kolorach i c), dlatego używamy np. Arkuszy stylów użytkownika CSS do nadpisywania stylów autora. Możesz zauważyć, że chociaż twoje trzy przykłady są wyświetlane na moim urządzeniu, najwyraźniej tak, jak chcesz, aby się pojawiły, dla mnie są one tylko czytelne na granicy. Dlaczego miałbyś stawiać swoje pragnienia artystyczne ponad łatwość czytania?
jamesqf
38
Oto interesujące spostrzeżenie: Edge nie może znaleźć tekstu w dwóch ostatnich próbkach, a Chrome nie może znaleźć tekstu w pierwszej. (Spróbuj Ctrl + F'ing dla BEHOLD w obu przeglądarkach.) Nie sprawdziłem Firefoksa.
Schizm
22
@ Schizm Firefox nie znajduje żadnego z nich. Wygląda na to, że Chrome prawdopodobnie używa normalizacji NFKC / NFKD przed wyszukiwaniem, co rozkłada tekst skryptu i broszury na Basic Latin. Wydaje się, że Firefox tego nie robi. Edge ... robi coś dziwnego.
Bob

Odpowiedzi:

224

Generał

Znaki te nie są przeznaczone do zwykłego tekstu alfabetu łacińskiego, ale do fonetyki, tekstu alfabetu cyrylicy, do stosowania jako symbole matematyczne (reprezentujące zmienne) lub podobne. Jedynym sposobem kodowania tekstu w podstawowym alfabecie łacińskim zgodnym ze standardem Unicode jest użycie znaków głównie używanych do tego celu (tj. Z bloku Basic Latin Unicode).

Podobnie jak w przypadku wielu innych standardów, powinieneś pomyśleć dwa razy o naruszeniu Unicode. Co więcej, Unicode obejmuje tak wiele systemów pisania, przypadków użycia i innych rzeczy, które istnieją tylko dla wstecznej kompatybilności z innymi standardami 1, że pełne zrozumienie wszystkich jego motywacji jest własną nauką. Krótko mówiąc, chyba że tak naprawdę wiesz, co robisz, jest bardzo prawdopodobne, że coś się zepsuje, o czym nawet nie pomyślałeś.

Konkretne przykłady

Dostępność

Zakodowany tekst istnieje nie tylko w celu renderowania czcionką. Może być również interpretowany np. Przez czytniki ekranu. Czytnik ekranu nie powinien zgadywać, czy

𝓽𝓱𝓮

ma być określonym artykułem lub iloczynem matematycznym 2 zmiennych 𝓽, 𝓱 i 𝓮 - po to są te znaki. Najlepszym zachowaniem będzie zatem określenie tych znaków, np. Dosłowne powiedzenie:

pogrubiony skrypt mały t, pogrubiony skrypt mały h, pogrubiony skrypt mały e

Zamiast tego nie powinien po prostu mówić „the”, ponieważ wówczas nie czytałby poprawnie tekstów matematycznych, których symbole tworzą wymowne słowo. 3)

Ruchliwość

Jeśli twój tekst jest ładnie renderowany na twoim komputerze, nie oznacza to, że będzie on również na czytniku. Najbardziej oczywistym przykładem jest to, że czytelnik nie ma żadnej czcionki obsługującej te znaki lub tekst jest renderowany przez oprogramowanie nieobsługujące czcionek zastępczych. Co prawda staje się to coraz mniej powszechne. Pamiętaj jednak, że niektórzy ludzie lubią dysleksję potrzebują specjalnych czcionek, które rzadziej wspierają te postacie.

Ale nawet jeśli maszyna czytelnika używa tylko innej czcionki, może to znacznie zmniejszyć czytelność tekstu. W pierwszym przykładzie jest to 𝓉𝒽ℯ renderowane za pomocą dwóch różnych czcionek:

𝓉𝒽ℯ renderowane za pomocą FreeSerif i STIX

Free Serif renderuje tekst tak, jakbyś chciał, aby był renderowany przy użyciu znaków specjalnych do symulacji tekstu, a mianowicie symulacji pisma ręcznego ciągłym pociągnięciem. Jednak te znaki są przeznaczone do użycia jako symbole matematyczne, łączenie nie ma sensu. Dlatego renderowanie przez STIX , które jest specjalnie zaprojektowane do celów matematycznych, jest bardziej zgodne ze sposobem, w jaki te znaki mają być używane.

W drugim przykładzie załóżmy, że ty lub czytelnik kursujesz z jakiegoś powodu kursywą „сᴜт мy вᴀʀ”. Przy dobrej czcionce otrzymasz 4 :

Moje napisane są w pionie i kursywą.  kursywa brzmi: „cum my bar”

Powodem tego jest to, że małe litery były (częściowo) symulowane za pomocą liter cyrylicy, a kursywa cyrylicy czasami wygląda zupełnie inaczej niż ich pionowe odpowiedniki . Więc to jest właściwe zachowanie.

Możliwość wyszukiwania

Jako pierwszy przykład zastanów się, co chcesz zrobić rozsądnym wyszukiwaniem znaku 𝒲 (skrypt matematyczny W ). Załóżmy, że wyszukiwanie ma dwa tryby, tryb domyślny i tryb dokładny (zwykle nazywany rozróżnianiem wielkości liter ). Ta postać powinna być:

  • znalezione podczas wyszukiwania w lub W w trybie domyślnym - dla tych, którzy nie chcą zawracać sobie głowy wprowadzaniem lub kopiowaniem i wklejaniem znaku specjalnego w polu wyszukiwania;

  • znalezione podczas szukania 𝒲 w trybie dokładnym - dla tych, którzy chcą szukać tam, gdzie wymieniona jest odpowiednia zmienna w dokumencie matematycznym³;

  • nie znaleziono przy wyszukiwaniu 𝓌, w lub W w trybie dokładnym z powodu przerwania wyszukiwania podobnego do powyższego.

Jeśli jednak użyjesz tego znaku do symulacji zwykłego tekstu, należy go znaleźć podczas wyszukiwania W lub 𝒲 w trybie dokładnym, co jest sprzeczne z powyższym.

Jako drugi przykład weź pod uwagę, że znaki cyrylicy nigdy nie powinny być znalezione podczas wyszukiwania znaków łacińskich i odwrotnie, ponieważ są one całkowicie różne. Jeśli jednak używasz znaków cyrylicy do symulacji małych łacińskich znaków, musisz to zrobić, jeśli nie chcesz, aby wyszukiwarka była przerywana. Doprowadziłoby to do tego, że ludzie znaleźliby wiele niepotrzebnych rzeczy, gdyby szukali rzadkiego słowa alfabetu łacińskiego, które akurat koresponduje z fałszywymi małymi literami popularnego słowa cyrylicy (i odwrotnie).

Dokładna opcja wyszukiwania nie może rozwiązać tego problemu, ponieważ w tych alfabetach jest ona zarezerwowana do innych celów.

Ogólnie rzecz biorąc , nie można zbudować wyszukiwania (bez szalonej liczby opcji), które nie jest przerywane przez użycie znaków specjalnych do symulacji stylizowanego tekstu łacińskiego.


1  Czy wiesz, że XKCD o nieuniknionym niepowodzeniu ujednolicenia standardów ? Cóż, Unicode się udało.
2  lub cokolwiek pusty operator znajduje się w odpowiedniej konwencji
3  Wiem, że bardzo niewiele tekstów matematycznych obsługuje obecnie to kodowanie lub coś kompatybilnego, ale mam nadzieję, że pewnego dnia to zrobią. Twój tekst wykorzystujący Unicode może nadal znajdować się w pobliżu i czytać.
4  Chyba że lokalizujesz się w języku macedońskim lub serbskim, w którym uzyskasz inny, ale wciąż niepożądany wynik.

Wrzlprmft
źródło
Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa została przeniesiona do czatu .
Journeyman Geek
1
Co z trzecim przykładem? Dlaczego tekst biuletynu występuje nawet w Unicode, a nie tylko w niektórych czcionkach?
posfan12
2
@ posfan12: Jest używany jako odrębny alfabet matematyczny - podobnie jak znaki skryptowe. (Zauważ, że numeracja tutaj nie ma nic wspólnego z punktorami w pytaniu.)
Wrzlprmft,
3
Twój przykład małego cpasa sugeruje zagadkę / współzawodnictwo: Znajdź poprawne zdanie, które staje się innym zdaniem, gdy kursywą ... (obaj interpretowane przez ludzkich czytelników z Ameryki Łacińskiej)
Hagen von Eitzen
67

Co może pójść źle? Widzę to:

wprowadź opis zdjęcia tutaj

w przeglądarce Firefox 50.1.0 w systemie Windows 7.

Problem braku glifów , w tym przypadku na urządzeniu mobilnym, jest dodatkowo zilustrowany na zdjęciu podanym przez użytkownika Chrisa Kenta w komentarzu , który został przycięty i zmieniony w stosunku do oryginału :

wprowadź opis zdjęcia tutaj

I użytkownika oals uprzejmie przyczynił się inny przykład:

wprowadź opis zdjęcia tutaj

Andrew Morton
źródło
7
@Lilienthal Jestem pod wrażeniem liczby lat, które upłynęły bez sprawdzania lub instalowania aktualizacji. To znaczy, ja wciąż za pomocą czegoś w oparciu off z Firefox 3.5 na niektórych urządzeniach, ale dokładnie nie mają wyboru w tej materii (urządzenie zbyt dobre, ale nie nadające się nowsza przeglądarka jest dostępna)
mtraceur
16
@Lilienthal Jakiś czas w 2020 r., Główne numery wersji Firefoksa mogą wymagać liczb 64-bitowych. Wkrótce potem numer wersji zajmie więcej miejsca niż rzeczywisty program. Aby odzyskać udział w rynku, numery wersji Chrome będą wymagały przechowywania całych planet.
Andrew Morton,
2
Wy, ludzie, macie pojęcie, na ile znanych i aktywnych luk bezpieczeństwa narażasz się za pomocą tak starożytnych przeglądarek?
Zach Lipton
3
@Zach Lipton: Czy zdajesz sobie sprawę, że to zdecydowanie na liście moich priorytetów? # 1 ma coś, czego naprawdę mogę użyć. Chociaż może ludzie Firefoksa (i wielu innych) przyjęli nowy paradygmat: bezpieczeństwo poprzez bezużyteczność.
jamesqf
29

Mam z tym problem XY.

Y i X wydają się mniejsze niż reszta tekstu

Widzimy tutaj, że Y i X wydają się mniejsze niż reszta tekstu. Przy niektórych poziomach powiększenia wydają się mieć ten sam rozmiar, ale wydaje się, że ujawnił problem z tymi konkretnymi glifami w tej konkretnej czcionce.

Michael Hampton
źródło
Mogę podać trzy możliwe wyjaśnienia tego, co widzisz: 1) Złe podpowiedzi . 2) Czcionka zastępcza jest używana do wszystkiego oprócz x i y. 3) Nieprawidłowy projekt czcionki: małe litery zostały zaprojektowane tak, aby były nieco większe niż małe litery (co jest prawidłowym wyborem), a następnie zostały użyte dla fonetycznych i cyrylicy znaków Unicode - co nie jest dobrym wyborem, ponieważ np. W użyciu fonetycznym te znaki muszą harmonizować z podstawowymi postaciami łacińskimi. - Tak czy inaczej: Punkty 1) i 3) nie wynikają z nadużycia Unicode. Punkt 2) jest już poruszony w innych odpowiedziach.
Wrzlprmft,
12
@Wrzlprmft: Z definicji są one nadużyciami Unicode, ponieważ Unicode nie ma małych liter. Unicode ma litery, które wyglądają jak małe litery w blokach alfabetu fonetycznego i bloku Latin Extended-D. W szczególności ani dwa bloki fonetyczne, ani łaciński rozszerzony blok D nie zawierają litery, która wygląda jak małe litery X , dlatego sądzę, że X pochodzi z innego miejsca, prawdopodobnie z bloku cyrylicy. Różnica nie wynika z 1, 2 ani 3. Jest to spowodowane literą należącą do innego alfabetu.
slebetman
@slebetman: Małe litery x to zwykłe małe litery x (możesz po prostu skopiować znak z pytania i sprawdzić go sam). A mała litera x musi harmonizować ze znakami fonetycznymi, ponieważ jest również używana jako znak fonetyczny. Powinien również mieć taką samą wysokość jak małe litery cyrylicy, ponieważ nie chcesz, aby pojedyncze słowa cyrylicy wyróżniały się z tekstu łacińskiego (i odwrotnie).
Wrzlprmft,
19
Głosowano za lol na „XY problem” :)
Andrew Morton
13

Używanie znaków spoza alfabetu łacińskiego, które wyglądają trochę jak łacińskie, stawia cię w towarzystwie spamerów, twórców pornografii i osób, które wiedzą, co ich interesuje, którzy chcą, aby ich tekst był nie do przeszukiwania, nie do wyjaśnienia i do odrzucenia. („Nigdy nie mówiłem, że to bezpieczne! Powiedziałem, że to był epizod sigma-alpha-integralny-znak! Nie możesz mnie pozwać !!!”)

Jeśli czujesz się komfortowo w tym klubie, skorzystaj z niego.

CCTO
źródło