Poza standardem Unicode znak to indywidualna jednostka tekstu złożona z jednego lub więcej grafemów . To, co standard Unicode definiuje jako „znaki”, jest w rzeczywistości mieszanką grafemów i znaków. Unicode zapewnia reguły interpretacji zestawionych grafemów jako pojedynczych znaków.
Punkt kodowy Unicode to niepowtarzalny numer przypisany do każdego znaku Unicode (który jest znakiem lub grafemem).
Niestety, reguły Unicode pozwalają na interpretację niektórych zestawionych grafemów jako innych grafemów, które mają już własne punkty kodowe ( wstępnie skomponowane formy ). Oznacza to, że w Unicode istnieje więcej niż jeden sposób reprezentowania znaku. Normalizacja Unicode rozwiązuje ten problem.
Glif to wizualna reprezentacja postaci. Czcionka zawiera zestaw glifów dla określonego zestawu znaków (nie znaków Unicode). Dla każdego znaku istnieje nieskończona liczba możliwych glifów.
Odpowiedź dla Marka Amery
Po pierwsze, jak powiedziałem, istnieje nieskończona liczba możliwych glifów dla każdego znaku, więc nie, znak nie jest „zawsze reprezentowany przez jeden glif”. Unicode nie zajmuje się zbytnio glifami, a rzeczy, które definiuje w swoich wykresach kodu z pewnością nie są glifami. Problem w tym, że nie wszystkie są postaciami. Więc czym one są?
Która jest większa, grafem czy postać? Jak można nazwać te elementy graficzne w tekście, które nie są literami ani znakami interpunkcyjnymi? Jednym z terminów, które szybko przychodzą na myśl, jest „grafem”. To słowo, które precyzyjnie wywołuje ideę „jednostki graficznej w tekście”. Podaję następującą definicję: Grafem jest najmniejszym wyrazistym składnikiem w tekście pisanym .
Można by pójść w drugą stronę i powiedzieć, że grafemy składają się ze znaków, ale wtedy nazwałoby się je „grafemami chińskimi”, a wszystkie te fragmenty, z których składają się grafemy chińskie, należałoby zamiast tego nazywać „znakami”. Jednak to wszystko wstecz. Grafemy to wyraźne małe kawałki. Postacie są bardziej rozwinięte. Wyrażenie „glify można komponować” byłoby lepiej sformułowane w kontekście Unicode jako „znaki można komponować”.
Unicode definiuje znaki, ale także definiuje grafemy, które mają być składane z innymi grafemami lub znakami. Te potworności, które skomponowałeś, są tego doskonałym przykładem. Jeśli się złapią, może otrzymają własne punkty kodowe w późniejszej wersji Unicode;)
W tym wszystkim jest element rekurencyjny. Na wyższych poziomach grafemy stają się postaciami, które stają się grafemami, ale są to grafemy aż do dołu.
Odpowiedź do TS
Rozdział 1 standardu stwierdza: „Kodowanie znaków Unicode traktuje znaki alfabetu, znaki ideograficzne i symbole w sposób równoważny, co oznacza, że można ich używać w dowolnej kombinacji iz równą łatwością”. Biorąc pod uwagę to stwierdzenie, powinniśmy być przygotowani na pewne zestawienie terminów w standardzie. Czasami właściwa terminologia staje się jasna dopiero z perspektywy czasu, gdy rozwija się norma.
W formalnych definicjach języka często zdarza się, że dwie podstawowe rzeczy są zdefiniowane względem siebie. Na przykład w
XML element jest definiowany jako znacznik początkowy, po którym może następować treść, po której następuje znacznik końcowy. Treść jest z kolei definiowana jako element, dane postaci lub kilka innych możliwych rzeczy. Wzorzec definicji odwołujących się do siebie jest również domniemany w standardzie Unicode:
Grafem to punkt kodowy lub znak.
Znak składa się z sekwencji jednego lub więcej grafemów.
Kiedy po raz pierwszy skonfrontowany z tymi dwiema definicjami, czytelnik może sprzeciwić się pierwszej definicji na tej podstawie, że punkt kodowy jest znakiem, ale nie zawsze jest to prawdą. Sekwencja dwóch punktów kodowych czasami koduje pojedynczy punkt kodowy w trakcie
normalizacji , a ten zakodowany punkt kodowy reprezentuje znak, jak pokazano na
rysunku 2.7 . Sekwencje punktów kodowych, które kodują inne punkty kodowe. Robi się to trochę skomplikowane i nie dotarliśmy nawet do warstwy, w której schematy kodowania znaków, takie jak UTF-8, są używane do kodowania punktów kodowych w sekwencje bajtów.
W niektórych kontekstach, na przykład artykuł naukowy na temat
znaków diakrytycznych , a poszczególne części znaku mogą pojawić się w tekście samodzielnie. W tym kontekście pojedyncza część znaku może być uważana za znak, więc sensowne jest, aby standard Unicode również pozostał elastyczny.
Jak zauważył Mark Avery, postać może zostać złożona w bardziej złożoną rzecz. Oznacza to, że każda postać może w razie potrzeby służyć jako grafem. Końcowy rezultat całej kompozycji to rzecz, o której „użytkownik myśli jak o postaci”. Wydaje się, że nie ma żadnego prawdziwego oporu, ani w standardzie, ani w tej dyskusji, wobec idei, że na najwyższym poziomie są w tekście te rzeczy, o których użytkownik myśli jako o pojedynczych postaciach. Aby uniknąć przeładowania tego terminu, możemy użyć „grafemu” we wszystkich przypadkach, w których chcemy odwołać się do części używanych do tworzenia znaku.
Czasami standard Unicode jest wszędzie ze swoją terminologią. Na przykład, rozdział 3
definiuje UTF-8 jako „formę kodowania”, podczas gdy słownik definiuje „formę kodowania” jako coś innego, a UTF-8 jako „schemat kodowania znaków”. Innym przykładem są „Grapheme_Base” i „Grapheme_Extend”, które są uznawane za błędy, ale utrzymują się, ponieważ ich czyszczenie jest trochę zadaniem. Wciąż pozostaje wiele do zrobienia, aby zaostrzyć terminologię stosowaną w normie.
Wniosek oprócz łączenia grafem Joiner to źle, gdy stwierdził, że „grafemy są sekwencje jednego lub więcej zakodowanych znaków, które odpowiadają co użytkownicy uważają za bohaterów.” Zamiast tego powinno brzmieć: „Sekwencja jednego lub więcej grafemów tworzy to, co użytkownik uważa za znak”. Wtedy mógłby użyć terminu „sekwencja grafemów” w odróżnieniu od terminu „sekwencja znaków”. Oba terminy są przydatne. „Sekwencja grafemów” zgrabnie sugeruje proces tworzenia postaci z mniejszych elementów. „sekwencja znaków” oznacza to, co wszyscy zwykle rozumiemy: „sekwencja rzeczy, o których użytkownik myśli jako znaki”.
Czasami programista naprawdę chce działać na poziomie sekwencji grafemów, więc mechanizmy sprawdzania i manipulowania tymi sekwencjami powinny być dostępne, ale generalnie, podczas przetwarzania tekstu, wystarczy operować na „sekwencjach znaków” (o czym myśli użytkownik jako postać) i pozwól systemowi zarządzać szczegółami niższego poziomu.
W każdym przypadku omawianym do tej pory w tej dyskusji, czystszym jest użycie „grafemu” w odniesieniu do niepodzielnych składników i „charakteru” w odniesieniu do skomponowanej całości. To użycie lepiej odzwierciedla również utrwalone znaczenie obu terminów.