Czym są jednostka kodująca i współrzędna kodowa znaku

0

Witam. Zacząłem uczyć się Javy, jednak nie do końca rozumiem, czym są jednostka kodująca i współrzędna kodowa znaku. Czy ktoś mógłby mi to przystępnie wyjaśnić?
Byłbym bardzo wdzięczny :))

0

Koziołek niestety ale nie znalazłem tam odpowiedzi na moje pytanie.
W dodatku chciałbym dopytać czym jest cytat "Dlaczego nie UTF-8? Ponieważ w kodowaniu tym jeden znak może mieć od 1 do 4 bajtów. Czyli krótko mówiąc aby dostac się do n-tego znaku nie możesz użyć najprostszego i najszybszego indeksowania, lecz musisz niesamowicie wolno (w porównaniu z indeksowaniem) parsować tekst sekwencyjnie." czym jest to prasowanie tekstu sekwencyjnie?

1

@Nazwa_użytkownika: to zacznijmy od podstaw. Znaki, litery, cyfry, glify, opisuje się za pomocą tzw. kodowania. Kodowania są różne i mają różną "pojemność". Jednym z kodowań jest UTF-8, które pozwala na zapisanie bardzo wielu różnych znaków. W przeciwieństwie do np. US-ASCII czy EBCDIC, które pozawalają na zapisanie 127 znaków w tym znaków sterujących np \0 (koniec pliku). Odbywa się to w następujący sposób.

Znaki są pogrupowane w zależności od ilości bajtów potrzebnych do ich zapisu. Minimum to 1 maksimum to 4 bajty. Mamy zatem już współrzędne kodowania - pierwszy bajt określa zakres, kolejne określają położenie na stronie. Ponad to każdy znak zaczyna się od odpowiedniej ilości bitów ustawionych na 1, wyjątek stanowi pierwsze 128 znaków, które zaczynają się od 00 ((szczegóły)[https://pl.wikipedia.org/wiki/UTF-8#Spos.C3.B3b_kodowania]). I tu dochodzimy do pytania o parsowanie tekstu. Jeżeli losowo wybierzesz dowolny bajt w tekście, to jesteś wstanie określić tylko, czy jest to początek znaku, jego środek czy jeden z 128 znaków pierwszej strony kodów. Działa to inaczej niż w przypadku US_ASCII, gdzie zawsze byłeś wstanie określić z jakim znakiem masz do czynienia.

0

Dzięki, już ogarniam :)
Tylko jeszcze jedna sprawa; Jak wiemy, jednostki z podstawowego zestawu BMP są kodowane za pomocą jednej jednostki kodowej (od U+0000 do U+FFFF oprócz obszaru surogatów ).
dlaczego znaki (4 - bajtowe) w utf-16 są kodowane jako "połączenie" dwóch jednostek kodowych (od U+D800 do U+DBFF i od U+DC00 do U+DFFF) zamiast np. od U+FFFF (koniec znaków z zestawu BMP) do 10FFFF(koniec zastawów wszystkich znaków) bez bawienia się w to łączenie jednostek kodowych.
czyli
U+0000 - U+FFFF - znaki BMP
U+10000 - U+10FFFF - znaki z innych zestawów

Dlaczego tak być nie może?

I ważne PS: dlaczego znaki 4 bajtowe są do 10FFFF skoro 10FFFF to dziesiętnie 1114111 a 4 bajty mają wartość 4294967295?

0

Odpowiedź na te pytania jest jedna. Ponieważ musisz przyjąć jakąś konwencję dla pierwszego bajtu w zapisie. Jeżeli będzie zaczynać się od 00 to wiadomo, że masz do czynienia ze znakiem z pierwszej grupy. Jeżeli będzie to 11 to wiadomo, że jest to bajt początkowy znaku wielo-bajtowego. Jeżeli jednak zaczyna się od 10 to wiadomo, że jest to któryś z kolejnych bajtów w znaku.
Kwestia założeń, które musisz przyjąć, tworząc kodowanie o zmiennej długości.

0

Dobra, dzięki wielkie, już wszystko wiem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1