Czy możesz powiedzieć w kilku słowach różnicę między Unicode a UTF-8?

Najlepsza odpowiedź

Pozostałe odpowiedzi nie są całkiem poprawne.

Unicode , to prawda, zawiera listę znaków z prawie każdego światowego skryptu. Jednak to tylko część standardu Unicode: Uniwersalny zestaw znaków kodowanych . Standard Unicode zawiera również zasady renderowania, porządkowania, normalizowania i, tak, kodowania tych znaków Unicode.

UTF-8 jest jednym z trzy standardowe kodowania znaków używane do reprezentowania Unicode jako tekstu komputerowego (pozostałe to UTF-16 i UTF-32). Historycznie, pliki tekstowe były zwykle kodowane jako sekwencje bajtów, gdzie każdy bajt reprezentował jeden znak. Ponieważ jednak bajt może przyjąć tylko jedną z 256 wartości, nie jest to możliwe w przypadku Unicode. Najprostsze kodowanie Unicode to UTF-32 , które wykorzystuje 4 bajty (lub 32 bity) na znak. Jest to jednak nieefektywne pod względem wykorzystania pamięci masowej, pamięci i przetwarzania. Do 1996 roku sądzono (lub miano nadzieję), że 2 bajty wystarczą do przedstawienia każdego znaku Unicode, ale potem ludzie zdawali sobie sprawę, ile jest chińskich znaków. W rezultacie niektóre języki, takie jak JavaScript, nadal używają 2 bajtów ( UCS-2 ) do reprezentowania znaków, co może powodować problemy podczas obsługi takich znaków, jak \ unicode {x1F60E }. Aby to naprawić, UCS-2 został zastąpiony przez UTF-16 , w którym niektóre znaki były reprezentowane przez dwa dwubajtowe jednostki kodu zamiast jednej. To sprawia, że ​​operowanie na łańcuchach jest bardziej skomplikowane (na przykład obliczanie długości łańcucha), ale zajmuje mniej miejsca niż w przypadku UTF-32.

UTF-8 jest podobny do UTF-16, z wyjątkiem tego, że jego jednostki kodu mają długość jednego bajtu (8 bitów), a znaki są reprezentowane przez od jednej do czterech jednostek kodu. Wszystkie znaki zwykłego tekstu (np. ASCII) są reprezentowane przez jeden bajt, w sposób identyczny jak zwykłe ciągi inne niż Unicode. Ma to tę dużą zaletę, że starszy tekst ASCII jest również prawidłowym kodem UTF-8. Co więcej, bajty reprezentujące ASCII nie są używane w reprezentacji innych znaków, więc starsze programy, które wyszukują te znaki, nie muszą być aktualizowane. Te zalety w połączeniu z faktem, że UTF-8 jest zwykle najbardziej efektywnym sposobem wykorzystania przestrzeni przechowywanie tekstu Unicode (szczególnie w przypadku tekstów zachodnich) oznacza, że ​​większość dzisiejszych stron internetowych jest kodowana w UTF-8.

Odpowiedź

Program do przetwarzania tekstu musi coś wypisać (i zapisz coś w pliku). Jeśli chcesz, aby programy współpracowały ze sobą, na przykład program do przetwarzania tekstu komunikuje się ze sterownikami drukarki i skanera, musisz opisać, w jaki sposób się komunikują. Chciałbyś to zrobić efektywnie. standard umożliwia tę wzajemną komunikację. W przeciwnym razie inteligentne cudzysłowy programu Microsoft Word nie będą działać z drukarką Canon i skanerem HP. Nie to, czego chcesz….

Dodano edycję: Zobacz odpowiedź firmy Comet na temat powiązania unicode z semantyką (nie składnią /reprezentacja). To przechodzi do mojego punktu dotyczącego interoperacyjności. Chcesz, aby sekwencja znaków była „znacząca”. Dlatego niektóre rzeczy są reprezentowane w Unicode, a inne nie. Użytkownicy alfabetu łacińskiego, użytkownicy cyrylicy, użytkownicy alfabetu greckiego i użytkownicy alfabetu tureckiego mają wszystkie litery, które wyglądają jak „a” (chociaż w niektórych czcionkach można je rozróżnić, aw innych nie), ale autorzy tych języków uważają je za różne postacie (mają różnicę semantyczną). W ten sposób Unicode uważa je za różne punkty kodowe. Reprezentują inną semantykę, inaczej sortują itd. To samo dotyczy cudzysłowów po lewej i prawej stronie oraz niektórych znaków akcentujących. W niektórych językach mają znaczenie semantyczne. Pewien rodzaj współdziałania uzyskuje się, gdy poprawnie przedstawiasz semantykę.

Inny rodzaj, gdy przedstawiasz rzeczy poprawnie obrazowo. Jednak unicode dąży do pierwszego, a nie do drugiego.

Gdyby unicode reprezentował homoglify jako pojedyncze znaki, miałby problem z tym, jaka czcionka została użyta, i zniszczyłby semantyczną poprawność. Łacińska litera a zapisana czarną czcionką bardzo różni się od hełmskiej od rzymskiej itd. A pochylenie i kursywa nie zawsze są takie same, ale czasami są.

Kiedy czytam znaki w Bułgarii, większość razy używają zupełnie innej czcionki dla swoich cyrylicy niż ich łacińska transkrypcja, więc jest oczywiste, że są to różne znaki, nawet w przypadku takich rzeczy, jak litera „a”. Ale czasami nie i kiedy widzę Bm na tablicy rejestracyjnej, muszę rozróżnić, czy jest to transkrypcja na Vt po angielsku, czy po prostu jest to łacińskie Bm i są całe takie słowa, które muszę przeczytać, aby wiedzieć, jaki zestaw znaków oni używają.

A nawet uzyskanie poprawności semantycznej jest trudne. Niemieckie znaki-s występują tylko w małych literach i jeśli wypisujesz słowo we wszystkich „dużych”, używasz dwóch znaków S, ale są słowa zapisane małymi literami, które używają dwóch znaków „małych” i te, które używają ostrych- s.

Zatem, jak prawie wszystkie standardy, unicode jest kompromisem. Próbuje uzyskać prawidłowe odpowiedzi, aby słowa były poprawnie przedstawiane i mogły być przesyłane za jego pomocą. Nie stara się być „graficznie” poprawnym, więc sekwencja Unicode opisuje swoją drukowaną reprezentację jednoznacznie ze wszystkimi określonymi szczegółami. Potrzebujesz do tego czegoś więcej niż tylko Unicode.

A kiedy już pójdziesz tą ścieżką, masz problem z urządzeniami, które nie mogą wyprowadzić (ani wprowadzić) opisu, który chcesz określić. Drukarka 200 dpi może zrobić tylko tyle, a istnieją subtelności, które może wyrazić drukarka 1200 dpi, które są po prostu tracone przy 200 dpi. Powstaje pytanie, czy ci zależy? Czasami tak, ale czasami nie.

Unicode jest dobry w wielu przypadkach, w których tego nie chcesz i po prostu chcesz mieć odpowiednią semantykę. Jeśli chcesz jednoznacznie przesłać słowo i wiedząc, które punkty kodowe Unicode są używane, wiedz, jak to słowo jest zapisywane w języku naturalnym. Istnienie homoglifów pozwala być niejednoznacznym, ale nie wymaga tego. Możesz być jednoznaczny w Unicode. Po prostu nie możesz przedstawić wszystkich szczegółów tego, jak może być wydrukowane.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *