Jaka jest dokładna różnica między Unicode a ASCII?
ASCII ma w sumie 128 znaków (256 w zestawie rozszerzonym).
Czy istnieje specyfikacja rozmiaru znaków Unicode?
Jaka jest dokładna różnica między Unicode a ASCII?
ASCII ma w sumie 128 znaków (256 w zestawie rozszerzonym).
Czy istnieje specyfikacja rozmiaru znaków Unicode?
Odpowiedzi:
ASCII definiuje 128 znaków, które są odwzorowane na liczby 0–127. Unicode definiuje (mniej niż) 2 21 znaków, które podobnie odwzorowują na liczby 0–2 21 (chociaż nie wszystkie liczby są obecnie przypisane, a niektóre są zastrzeżone).
Unicode jest nadzbiorem ASCII, a liczby 0–127 mają takie samo znaczenie w ASCII, jak w Unicode. Na przykład liczba 65 oznacza „łacińska stolica„ A ”.
Ponieważ znaki Unicode zazwyczaj nie mieszczą się w jednym 8-bitowym bajcie, istnieje wiele sposobów przechowywania znaków Unicode w sekwencjach bajtów, takich jak UTF-32 i UTF-8.
Zrozumienie, dlaczego ASCII i Unicode zostały stworzone, pomogło mi zrozumieć różnice między nimi.
ASCII, Origins
Jak stwierdzono w innych odpowiedziach, ASCII używa 7 bitów do przedstawienia znaku. Używając 7 bitów, możemy uzyskać maksymalnie 2 ^ 7 (= 128) różnych kombinacji * . Co oznacza, że możemy przedstawić maksymalnie 128 znaków.
Czekaj, 7 bitów? Ale dlaczego nie 1 bajt (8 bitów)?
Ostatni bit (8) służy do unikania błędów jako bitu parzystości . To było ważne lata temu.
Większość znaków ASCII to znaki alfabetu, które można wydrukować, takie jak abc, ABC, 123,? &! Itd. Inne to znaki sterujące, takie jak znak powrotu karetki, przesunięcie wiersza , tab itp.
Zobacz poniżej binarną reprezentację kilku znaków w ASCII:
0100101 -> % (Percent Sign - 37)
1000001 -> A (Capital letter A - 65)
1000010 -> B (Capital letter B - 66)
1000011 -> C (Capital letter C - 67)
0001101 -> Carriage Return (13)
Zobacz pełną tabelę ASCII tutaj .
ASCII był przeznaczony tylko dla języka angielskiego.
Co? Dlaczego tylko angielski? Tak wiele języków!
Ponieważ w tym czasie centrum przemysłu komputerowego znajdowało się w USA. W związku z tym nie musieli obsługiwać akcentów ani innych znaków, takich jak á, ü, ç, ñ itp. (Aka diakrytyczne ).
ASCII Extended
Niektórzy sprytni ludzie zaczęli używać ósmego bitu (bitu używanego do parzystości) do kodowania większej liczby znaków w celu obsługi ich języka (na przykład obsługi „é” w języku francuskim). Wystarczy jeden dodatkowy bit podwoić rozmiar oryginalnej tabeli ASCII, aby zmapować do 256 znaków (2 ^ 8 = 256 znaków). I nie 2 ^ 7 jak poprzednio (128).
10000010 -> é (e with acute accent - 130)
10100000 -> á (a with acute accent - 160)
Nazwę tego „ASCII rozszerzono do 8 bitów, a nie 7 bitów jak poprzednio” można by nazwać po prostu „rozszerzonym ASCII” lub „8-bitowym ASCII”.
Jak zauważył @Tom w swoim komentarzu poniżej, nie ma czegoś takiego jak „ rozszerzony ASCII ”, ale jest to łatwy sposób na odniesienie się do tej 8-bitowej sztuczki. Istnieje wiele odmian 8-bitowej tabeli ASCII, na przykład ISO 8859-1, zwanej także ISO Latin-1 .
Unicode, The Rise
ASCII Extended rozwiązuje problem języków opartych na alfabecie łacińskim ... a co z innymi, którzy potrzebują zupełnie innego alfabetu? Grecki? Rosyjski? Chińczycy i polubienia?
Potrzebowalibyśmy zupełnie nowego zestawu znaków ... to racjonalność stojąca za Unicode. Unicode nie zawiera wszystkich znaków z każdego języka, ale z pewnością zawiera gigantyczną liczbę znaków ( patrz tabela ).
Nie można zapisać tekstu na dysku twardym jako „Unicode”. Unicode to abstrakcyjna reprezentacja tekstu. Musisz „zakodować” tę abstrakcyjną reprezentację. Tam właśnie zaczyna się kodowanie .
Kodowanie: UTF-8 vs UTF-16 vs UTF-32
Ta odpowiedź całkiem dobrze wyjaśnia podstawy:
UTF-8 używa zestawu ASCII dla pierwszych 128 znaków. Jest to przydatne, ponieważ oznacza, że tekst ASCII jest również poprawny w UTF-8.
Mnemonika:
Uwaga:
Dlaczego 2 ^ 7?
Dla niektórych jest to oczywiste, ale na wszelki wypadek. Mamy siedem dostępnych miejsc wypełnionych 0 lub 1 ( kod binarny ). Każda może mieć dwie kombinacje. Jeśli mamy siedem miejsc, mamy 2 * 2 * 2 * 2 * 2 * 2 * 2 = 2 ^ 7 = 128 kombinacji. Pomyśl o tym jako o kombinacji zamka z siedmioma kołami, z których każde ma tylko dwie cyfry.
Źródło: Wikipedia , ten świetny post na blogu i Mocki, gdzie początkowo opublikowałem to streszczenie.
ASCII ma 128 punktów kodowych, od 0 do 127. Może zmieścić się w jednym 8-bitowym bajcie, wartości od 128 do 255 zwykle były używane dla innych znaków. Z niezgodnymi wyborami, powodując katastrofę strony kodowej . Tekst zakodowany na jednej stronie kodowej nie może być poprawnie odczytany przez program, który zakłada lub zgaduje na innej stronie kodowej.
Unicode przyszło rozwiązać tę katastrofę. Wersja 1 rozpoczęła się od 65536 punktów kodowych, zwykle zakodowanych w 16 bitach. Później rozszerzony w wersji 2 do 1,1 miliona punktów kodowych. Obecna wersja to 6.3, wykorzystująca 110 187 z dostępnych 1,1 miliona punktów kodowych. To już nie pasuje do 16 bitów.
Kodowanie w 16 bitach było powszechne, gdy pojawiła się wersja v2, używana na przykład w systemach operacyjnych Microsoft i Apple. I środowiska wykonawcze takie jak Java. Specyfikacja v2 wymyśliła sposób odwzorowania tych 1,1 miliona punktów kodowych na 16-bitowe. Kodowanie o nazwie UTF-16, kodowanie o zmiennej długości, w którym jeden punkt kodowy może zająć 2 lub 4 bajty. Pierwotne punkty kodu v1 zajmują 2 bajty, a dodane 4.
Innym bardzo popularnym kodowaniem o zmiennej długości, stosowanym w systemach operacyjnych i narzędziach * nix, jest UTF-8, kod może zająć od 1 do 4 bajtów, oryginalne kody ASCII zajmują 1 bajt, a reszta zajmuje więcej. Jedynym kodowaniem o zmiennej długości jest UTF-32, zajmuje 4 bajty na punkt kodowy. Nie jest często używany, ponieważ jest dość marnotrawny. Są też inne, takie jak UTF-1 i UTF-7, powszechnie ignorowane.
Problem z kodowaniem UTF-16/32 polega na tym, że kolejność bajtów będzie zależeć od endiczności komputera, który utworzył strumień tekstu. Dodaj więc do miksu UTF-16BE, UTF-16LE, UTF-32BE i UTF-32LE.
Posiadanie tych różnych opcji kodowania przywraca do pewnego stopnia katastrofę strony kodowej, a także ożywione debaty wśród programistów, które wybór UTF jest „najlepszy”. Ich skojarzenie z domyślnymi ustawieniami systemu operacyjnego wyznacza granice. Jedną z przeciwdziałań jest definicja BOM, Byte Order Mark, specjalnego punktu kodowego (U + FEFF, przestrzeń o zerowej szerokości) na początku strumienia tekstowego, który wskazuje, w jaki sposób kodowana jest reszta strumienia. Wskazuje zarówno kodowanie UTF, jak i endianowość i jest neutralny dla mechanizmu renderowania tekstu. Niestety jest to opcjonalne i wielu programistów twierdzi, że ma prawo go pominąć, więc wypadki wciąż są dość częste.
java zapewnia obsługę Unicode, tzn. obsługuje wszystkie alfabety z całego świata. Stąd wielkość znaków w java wynosi 2 bajty. Zakres wynosi od 0 do 65535.
ASCII ma 128 pozycji kodu przypisanych do znaków graficznych i znaków kontrolnych (kodów kontrolnych).
Unicode ma 1124112 pozycji kodu. Około 100 000 z nich zostało obecnie przypisanych do znaków, a wiele punktów kodowych zostało trwale nie znakowych (tj. Nigdy nie jest wykorzystywanych do kodowania żadnego znaku), a większość punktów kodowych nie została jeszcze przypisana.
Jedyne rzeczy, które ASCII i Unicode mają wspólną cechą są: 1) Są kody znaków. 2) Zdefiniowano 128 pierwszych pozycji kodu Unicode, które mają takie samo znaczenie jak w ASCII, z tym wyjątkiem, że pozycje kodu znaków kontrolnych ASCII są po prostu zdefiniowane jako oznaczające znaki kontrolne, z nazwami odpowiadającymi ich nazwom ASCII, ale ich znaczenie jest nie zdefiniowano w Unicode.
Czasami jednak Unicode jest określany (nawet w standardzie Unicode!) Jako „szeroki ASCII”. Jest to hasło, które głównie stara się przekazać ideę, że Unicode ma być uniwersalnym kodem znaków w taki sam sposób, jak kiedyś ASCII (chociaż repertuar znaków ASCII był beznadziejnie niewystarczający do uniwersalnego zastosowania), w przeciwieństwie do używania różnych kodów w różne systemy i aplikacje oraz dla różnych języków.
Unicode jako takie definiuje tylko „logiczny rozmiar” znaków: Każdy znak ma numer kodu w określonym zakresie. Te numery kodów mogą być prezentowane przy użyciu różnych kodowań przesyłania, a wewnętrznie w pamięci znaki Unicode są zwykle reprezentowane przy użyciu jednej lub dwóch 16-bitowych ilości na znak, w zależności od zakresu znaków, czasami przy użyciu jednej 32-bitowej ilości na znak.
ASCII i Unicode są kodowaniami dwóch znaków. Zasadniczo są to standardy reprezentowania binarnych znaków różnicowych, aby można je było zapisywać, przechowywać, przesyłać i czytać w mediach cyfrowych. Główną różnicą między nimi jest sposób kodowania znaku i liczba bitów, których używają dla każdego z nich. ASCII pierwotnie użył siedmiu bitów do zakodowania każdego znaku. Zostało to później zwiększone do ośmiu dzięki rozszerzonemu ASCII, aby zaradzić pozornej nieadekwatności oryginału. W przeciwieństwie do tego Unicode używa programu do kodowania o zmiennej liczbie bitów, w którym można wybierać między kodowaniem 32, 16 i 8-bitowym. Korzystanie z większej liczby bitów pozwala używać większej liczby znaków kosztem większych plików, a mniej bitów daje ograniczony wybór, ale oszczędzasz dużo miejsca. Korzystanie z mniejszej liczby bitów (tj
Jednym z głównych powodów, dla których problemem był Unicode, było wiele niestandardowych rozszerzonych programów ASCII. O ile nie korzystasz z dominującej strony, która jest używana przez Microsoft i większość innych firm programistycznych, możesz napotkać problemy z postaciami wyświetlanymi jako pola. Unicode praktycznie eliminuje ten problem, ponieważ wszystkie punkty kodowe znaków zostały znormalizowane.
Kolejną ważną zaletą Unicode jest to, że maksymalnie może pomieścić ogromną liczbę znaków. Z tego powodu Unicode zawiera obecnie większość języków pisanych i wciąż ma miejsce na jeszcze więcej. Obejmuje to typowe skrypty od lewej do prawej, takie jak angielski, a nawet skrypty od prawej do lewej, takie jak arabski. Chiński, japoński i wiele innych wariantów jest również reprezentowanych w Unicode. Dlatego Unicode nie zostanie wkrótce zastąpiony.
Aby zachować kompatybilność ze starszym ASCII, który był wówczas w powszechnym użyciu, Unicode został zaprojektowany w taki sposób, aby pierwsze osiem bitów pasowało do najpopularniejszej strony ASCII. Jeśli więc otworzysz plik zakodowany w formacie ASCII za pomocą Unicode, nadal otrzymasz prawidłowe znaki zakodowane w pliku. Ułatwiło to przyjęcie Unicode, ponieważ zmniejszyło wpływ przyjęcia nowego standardu kodowania dla tych, którzy już używali ASCII.
Podsumowanie:
1.ASCII uses an 8-bit encoding while Unicode uses a variable bit encoding.
2.Unicode is standardized while ASCII isn’t.
3.Unicode represents most written languages in the world while ASCII does not.
4.ASCII has its equivalent within Unicode.
Zaczerpnięte z: http://www.differencebetween.net/technology/software-technology/difference-between-unicode-and-ascii/#ixzz4zEjnxPhs
Podane liczby służą tylko do przechowywania 1 znaku
ASCII definiuje 128 znaków, ponieważ Unicode zawiera repertuar ponad 120 000 znaków.
Poza tym, że UTF jest nadzbiorem ASCII, kolejna dobra różnica między ASCII a UTF polega na kodowaniu plików dyskowych oraz reprezentacji danych i przechowywaniu w pamięci losowej. Programy wiedzą, że dane należy rozumieć jako ciąg ASCII lub UTF, albo wykrywając specjalne kody znaczników kolejności bajtów na początku danych, albo zakładając z intencji programisty, że dane są tekstem, a następnie sprawdzając je pod kątem wzorców wskazujących, że jest to w jednym lub innym kodowaniu tekstu.
Korzystanie z konwencjonalną notację prefiksu 0x
dla danych szesnastkowych, podstawowe odniesienie dobre jest to, że zaczyna tekstowych ASCII o wartościach bajtowych 0x00
do 0x7F
reprezentującą jedną z możliwych wartości ASCII . Tekst UTF jest zwykle wskazywany przez rozpoczęcie od bajtów 0xEF 0xBB 0xBF
dla UTF8. W przypadku UTF16 bajty początkowe 0xFE 0xFF
lub 0xFF 0xFE
są używane w kolejności bajtów tekstowych wskazanej przez kolejność bajtów początkowych. Prosta obecność wartości bajtów, które nie znajdują się w zakresie możliwych wartości bajtów ASCII, również wskazuje, że dane to prawdopodobnie UTF.
Istnieją inne znaki kolejności bajtów, które używają różnych kodów, aby wskazać, że dane powinny być interpretowane jako tekst zakodowany w określonym standardzie kodowania.