Wstęp do Informatyki dr hab. Bożena Woźna-Szcześniak, prof. AJD bwozna@gmail.com Jan Długosz University, Poland Wykład 5 Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 1 / 38
ASCII ASCII (ang. American Standard Code for Information Interchange) to 7-bitowy kod przyporzadkowuj acy liczby z zakresu 0 127: literom alfabetu angielskiego, cyfrom, znakom przestankowym i innym symbolom oraz poleceniom sterujacym. Na przykład, liczbie 65 = 01000001 (2) odpowiada litera A. liczbie 97 = 01100001 (2) odpowiada litera a. Zdanie: Ala ma kota., to zbiór następujacych liczb: 65, 108, 97, 32, 109, 97, 32, 107, 111, 116, 97, 46 (binarnie: 0100 0001, 0110 1100, 0110 0001, 0010 0000, 0110 1101, 0110 0001, 0010 0000, 0110 1011, 0110 1111, 0111 0100, 0110 0001, 0010 1110. Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 2 / 38
ASCII ASCII - najczęściej stosowany system kodowanie znaków do grudnia 2007 r. 1963 - publikacja pierwszej edycji standardu. 1967 - publikacja kolejnej edycji standardu. 1986 - publikacja najnowszej aktualizacji standardu. Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 3 / 38
ASCII Znaki ASCII dziela się na: drukowalne: 95 znaków o kodach 32-126; sterujace: 33 znaki o kodach 0-31 i 127 Znaki drukowalne to: litery duże i małe, cyfry, znaki interpunkcyjne oraz inne znaki, np. spacja (kod 32). Przykładowe kody: liczba 35 odpowiada za znak # liczby od 48 do 57 odpowiadaja za kodowanie cyfr liczba 64 odpowiada za znak at (@) liczby od 65 do 90 odpowiadaja za kodowanie dużych liter liczby od 97 do 122 odpowiadaja za kodowanie małych liter liczba 126 odpowiada za znak tyldy ( ) Znaki sterujace służace do kontroli urzadzenia odbierajacego komunikat, np. drukarki czy terminala. Przykładowe kody: liczbie 8 odpowiada "klawiszowi" Backspace liczbie 27 odpowiada "klawiszowi" Escape liczbie 127 odpowiada "klawiszowi" Delete Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 4 / 38
ASCII Znaki ASCII dziela się na: drukowalne: 95 znaków o kodach 32-126; sterujace: 33 znaki o kodach 0-31 i 127 Znaki drukowalne to: litery duże i małe, cyfry, znaki interpunkcyjne oraz inne znaki, np. spacja (kod 32). Przykładowe kody: liczba 35 odpowiada za znak # liczby od 48 do 57 odpowiadaja za kodowanie cyfr liczba 64 odpowiada za znak at (@) liczby od 65 do 90 odpowiadaja za kodowanie dużych liter liczby od 97 do 122 odpowiadaja za kodowanie małych liter liczba 126 odpowiada za znak tyldy ( ) Znaki sterujace służace do kontroli urzadzenia odbierajacego komunikat, np. drukarki czy terminala. Przykładowe kody: liczbie 8 odpowiada "klawiszowi" Backspace liczbie 27 odpowiada "klawiszowi" Escape liczbie 127 odpowiada "klawiszowi" Delete Tablica kodów ASCII dostępna jest np. na: https://pl.wikipedia.org/wiki/ascii Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 4 / 38
ASCII - tablica kodów Źródło:http: //www.unicodetools.com/unicode/codepages.php Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 5 / 38
Rozszerzony ASCII I Rozszerzony ASCII lub Extended ASCII lub ANSI zapisuje znaki na 8-bitach, czyli dzięki zagospodarowaniu ósmego bitu zawiera 256 znaków. Dzięki 8-bitowemu ANSI można w tablicy znaków umieścić dodatkowe znaki graficzne, a także znaki diakrytyczne - na przykład polskie. Pierwsze 128 pozycji jest zgodne z ASCII, następne to znaki narodowe i inne symbole. Istnieje wiele różnych rozszerzeń ASCII wykorzystujacych ósmy bit nazywanych stronami kodowymi. Różne strony kodowe przyjmuja dla tego samego kodu odmienne znaki, a ponadto różnia się samymi zestawami znaków. W zależności od wyboru strony kodowej, ten sam dokument może być czytelny, moga być trudności z jego odczytaniem albo też nie będzie można go w ogóle odczytać. Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 6 / 38
Rozszerzony ASCII II Międzynarodowa organizacja normalizacyjna ISO stworzyła (w porozumieniu z zainteresowanymi) zestaw standardów ISO/IEC 8859-x, gdzie x jest cyfra od 1 do 16, służacych do kodowania znaków za pomoca 8 bitów. Wszystkie zestawy ISO 8859 maja znaki 0-127 identyczne jak w kodzie ASCII. Standardów kodowania polskich znaków to ISO-8859-2 (Latin-2; łaciński dla Europy środkowej i wschodniej), ISO 8859-13 (Latin-7) oraz ISO 8859-16 (Latin-10). Opis pozostałych zestawów ISO można znaleźć, np. na: https://pl.wikipedia.org/wiki/iso_8859. Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 7 / 38
Strona kodowa ISO-8859-2 (Central Europe) Źródło: http://www.unicodetools.com/unicode/codepages.php Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 8 / 38
Rozszerzony ASCII Kodowanie polskich znaków diakrytycznych w różnych standardach: można znaleźć na stronie: https: //pl.wikipedia.org/wiki/kodowanie_polskich_znaków Oto najbardziej popularne strony kodowe ISO-8859-2 (Latin-2) ISO 8859-16 (Latin-10) - łaciński dla Europy środkowej - zmodyfikowany ISO 8859-2 ze znakiem euro i dodatkowymi literami dla kilku języków. Windows-1250 (CP-1250) - strona kodowa używana przez system Microsoft Windows. Mac OS Central Europe - strona kodowa używana przez system Mac OS w komputerach Macintosh. Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 9 / 38
Strona kodowa Windows-1250 (Central Europe) Źródło: http://www.unicodetools.com/unicode/codepages.php Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 10 / 38
Problemy stron kodowych Każdy język lub grupa języków ma własne kodowanie. Różni producenci lub komitety normalizacyjne opracowuja różne kodowania, a co za tym idzie generalnie każdy język ma kilka, często niekompatybilnych, kodowań, np. Windows-1250 i ISO-8859-2. Zastosowanie strony kodowej do nowego języka wymaga jej przystosowania do reprezentacji znaków tego języka. Nie można łatwo mieszać wielu języków w jednym dokumencie lub systemie. Nie można łatwo przenosić dokumentów pomiędzy różnymi programami i systemami operacyjnymi. Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 11 / 38
Problemy stron kodowych Każdy język lub grupa języków ma własne kodowanie. Różni producenci lub komitety normalizacyjne opracowuja różne kodowania, a co za tym idzie generalnie każdy język ma kilka, często niekompatybilnych, kodowań, np. Windows-1250 i ISO-8859-2. Zastosowanie strony kodowej do nowego języka wymaga jej przystosowania do reprezentacji znaków tego języka. Nie można łatwo mieszać wielu języków w jednym dokumencie lub systemie. Nie można łatwo przenosić dokumentów pomiędzy różnymi programami i systemami operacyjnymi. Recepta na powyższe problemy: OPRACOWANIE UNIWERSALNEGO STANDARDU KODOWANIA WSZYSTKICH ZNAKÓW Z WSZYSTKICH JEZYKÓW WYSTEPUJ ACYCH (LUB KTÓRE WYSTEPOWAŁY) NA ŚWIECIE Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 11 / 38
Częściowa realizacja recepty - Unicode Unicode zapewnia wygodna obsługę tekstów w dowolnym języku, ich przenośność pomiędzy programami i systemami operacyjnymi, a także wymianę dokumentów z osobami z całego świata. Unicode zapewnia autorom ksiażek i naukowcom (zwłaszcza lingwistom), że cytaty w obcych językach (nawet archaicznych i wymarłych), zapisy fonetyczne, dodatkowe symbole akcentowe, itp. sa łatwo dostępne, oczywiście przy założeniu, że używany font zawiera potrzebne znaki. Unicode zawieraj również poszerzone wsparcie dla wzorów matematycznych, co w połaczeniu z fontami typu OpenType czyni Unicode użytecznym w procesie przygotowywania tekstów matematycznych (ogólniej tekstów z zakresu nauk ścisłych) do publikacji. Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 12 / 38
Hostoria standardu Unicode I 1889r - Korzenie standardu Unicode można już znaleźć w ksiażce pod tytułem: Unicode: The Universal Telegraphic Phrase-Book. A Code of Cypher Words for Commercial, Domestic, and Familiar Phrases in Ordinary Use in Inland and Foreign Telegrams., czyli: Unikod: Uniwersalna ksiażka skrótów telegraficznych. Słowa kodujace zwroty handlowe, domowe i potoczne wykorzystywane powszechnie w telegramach krajowych i zagranicznych. Wydawca: Cassell Limited, 1889. W formie oryginalnej: Uniwersytet Michigan. W formie cyfrowej: 18 Maj 2007. Kolejne wersje Unicode (http://www.unicode.org/ versions/enumeratedversions.html) Październik 1991 - ukazuje się Unicode 1.0.0 Czerwiec 1993 - ukazuje się Unicode 1.1.0 Lipiec 1996 - ukazuje się Unicode 2.0.0 Maj 1998 - ukazuje się Unicode 2.1.2 Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 13 / 38
Hostoria standardu Unicode II Sierpień 1998 - ukazuje się Unicode 2.1.5 Grudzień 1998 - ukazuje się Unicode 2.1.8 Kwiecień 1999 - ukazuje się Unicode 2.1.9 Wrzesień 1999 - ukazuje się Unicode 3.0.0 Sierpień 2000 - ukazuje się Unicode 3.0.1 Marzec 2001 - ukazuje się Unicode 3.1.0 Sierpień 2001 - ukazuje się Unicode 3.1.1 Marzec 2002 - ukazuje się Unicode 3.2.0 Kwiecień 2003 - ukazuje się Unicode 4.0.0 Marzec 2004 - ukazuje się Unicode 4.0.1 31 Marzec 2005 - ukazuje się Unicode 4.1.0 14 Lipiec 2006 - ukazuje się Unicode 5.0.0 4 Kwiecień 2008 - ukazuje się Unicode 5.1.0 1 Październik 2009 - ukazuje się Unicode 5.2.0 11 Październik 2010 - ukazuje się Unicode 6.0.0 31 Styczeń 2012 - ukazuje się Unicode 6.1.0 26 wrzesień 2012 - ukazuje się Unicode 6.2.0 30 wrzesień 2013 - ukazuje się Unicode 6.3.0 Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 14 / 38
Hostoria standardu Unicode III 16 Czerwiec 2014 - ukazuje się Unicode 7.0.0 17 Czerwiec 2015 - ukazuje się Unicode 8.0.0 Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 15 / 38
Znacznik kolejności bajtów BOM - (ang. byte order mark) a a Źródło: https://pl.wikipedia.org/wiki/bom_(informatyka) BOM, czyli znacznik kolejności bajtów, to znak niedrukowalny stosowany w wielobajtowym kodowaniu znaków. BOM zapisywany jest na poczatku strumienia bajtów (pliku) i informuje, w jakiej kolejności należy ustawić bajty, aby odczytać kod znaku. BOM rozwiazuje problem interpretacji kolejności bajtów w znaku i umożliwia automatyczna detekcję formy kodowania Unicode. BOM powiększa rozmiar danych o kilka bajtów. Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 16 / 38
Little endian and Big endian Little endian to forma zapisu danych, w której mniej znaczacy bajt (ang. low-order byte) umieszczony jest jako pierwszy. Procesory używajace formy little endian, to m.in. procesory z rodziny x86. Big endian to forma zapisu danych, w której najbardziej znaczacy bajt (ang. high-order byte) umieszczony jest jako pierwszy. Procesory, które używaja formy big endian, to m.in., HP Intel Itanium, SPARC, Motorola 68000, IBM System/360. Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 17 / 38
Unicode - wprowadzenie I Unicode jest standardem kodowania znaków, zaprojektowanym do wymiany, przetwarzania i wyświetlania dokumentów pisanych w każdym języku i dotyczacych każdej dziedziny współczesnego świata. Ponadto, obsługuje klasyczne i historyczne teksty zapisane wielu językach. Unicode jest rozwijany jest przez The Unicode Consortium, w którego skład wchodza ważne firmy komputerowe, producenci oprogramowania, instytuty naukowe, agencje międzynarodowe oraz grupy zainteresowanych użytkowników. Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 18 / 38
Unicode - wprowadzenie II Każda wersja standardu Unicode jest zdefiniowana poprzez wydanie: specyfikacji nowego jadra (the core specification), tablicy kodów znaków (ang. Character Code Charts, http://www.unicode.org/charts/), standardowych załaczników (ang. Unicode Standard Annexes, http://www.unicode.org/reports/index.html) - np. załacznik przedstawiajacy algorytm łamania linii. bazy danych znaków Unicode (ang. The Unicode Character Database - UCD, http://www.unicode.org/ucd/) - baza ta składa się z wielu plików danych zawierajacych listy znaków wraz z zwiazanymi z nimi danymi. Zawiera również pliki danych zawierajace dane z badań dotyczacych zgodności z normami ważnych algorytmów Unicode. Wersje standardu Unicode sa w pełni kompatybilne i zsynchronizowane z odpowiednimi wersjami międzynarodowej normy ISO/IEC 10646. Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 19 / 38
Unicode - wprowadzenie III Norma ISO/IEC 10646 opisuje uniwersalny zestaw znaków (UCS - Universal Character Set) służacy do opisu znaków (liter, cyfr, symboli, ideogramów itd.) z wielu języków i pism na świecie. Zestaw zawiera około 100 000 abstrakcyjnych znaków, z których każdy posiada unikalna nazwę i kod znaku. Każda implementacja standardu, która jest zgodna z Unicode, jest również zgodna z ISO/IEC 10646. Standard Unicode przypisuje każdemu znakowi unikalna wartość liczbowa i nazwę oraz pozostaje w spójności z ASCII. Standard Unicode i ISO/IEC 10646 zapewniaja wsparcie dla trzech formy kodowania: UTF-8, UTF-16, UTF-32, które wykorzystuja wspólny zestaw znaków. Wspomniane formy kodowania pozwala na zakodowanie aż miliona znaków. Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 20 / 38
Jakie znaki zawiera Standard Unicode? I Standard Unicode definiuje kody znaków, które sa używane obecnie we wszystkich głównych językach pisanych. Obsługiwane pisma to: pismo europejskie, pismo bliskowschodnie (pisane z prawej do lewej) oraz wiele pism Azjatyckich. Standard Unicode zawiera ponadto: znaki interpunkcyjne, znaki diakrytyczne i diakrytyki, symbole matematyczne, symbole techniczne, strzałki, ideogramy itp. Znaki diakrytyczne to znaki graficzne używane w alfabetach i innych systemach pisma, umieszczane nad, pod litera, obok lub wewnatrz niej, zmieniajace artykulację tej litery i tworzace przez to nowa literę. W alfabetach sylabowych moga zmienić znaczenie całej sylaby 1. W języku polskim jest dziewięć liter tworzonych za pomoca znaków diakrytycznych (litery diakrytyzowane, litery diakrytyczne): a, ć, ę, ł, ń, ó, ś, ź, ż. Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 21 / 38
Jakie znaki zawiera Standard Unicode? II Ideogram to umowny znak graficzny lub pisemny wyrażajacy określone pojęcie bez użycia liter. Ideogramami posługuje się współcześnie pismo chińskie 2. Źródło: https://en.wikipedia.org/wiki/ideogram Unicode Standard w wersji 8.0 oferuje kody dla 120 672 znaków z głównych alfabetów świata, zbiory ideogramów oraz symboli. 1 https://pl.wikipedia.org/wiki/znaki_diakrytyczne 2 https://pl.wikipedia.org/wiki/ideogram Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 22 / 38
Przestrzeń kodowa Unicode I Przestrzeń kodowa Unicode podzielona jest na 17 obszarów kodowych ponumerowanych następujaco: 0, 1,..., 9, A,..., F, 10. Każdy obszar kodowy może zakodować 65536 znaków (16 bitów), tzn. zawiera 65536 kodów (ang. code points). Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 23 / 38
Przestrzeń kodowa Unicode II Obszar podstawowy nr 0 (ang. Basic Multilingual Plane, BMP) - najważniejszy obszar kodowy, który zawiera prawie wszystkie powszechnie używane pisma i symbole. Znajduja się tutaj znaki z kodami z zakresu: od U+0000 do U+FFFF (tj. 0-65 535), tj. znaki i symbole łacińskie transkrypcje europejskie znaki i systemy pisanie (np. grecki i cyrylica) znaki afrykańskie i azjatyckie (np. Hiragana i Katakana) znaki diakrytyczne ideogramy chińskie, japońskie i koreańskie symbole i różne inne znaki miejsce na prywatne znaki zdefiniowane przez użytkownika Obszar dodatkowy nr 1 (ang. Supplementary Multilingual Plane (SMP)) - obejmuje znaki z kodami z zakresu: U+10000 - U+1FFFF. SMP zawiera historyczne systemy pisma i symbole, które sa bardzo rzadko używane, na przykład, znaki domina. Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 24 / 38
Przestrzeń kodowa Unicode III Obszar dodatkowy ideogramów nr 2 (ang. Supplementary Ideographic Plane, SIP) - obejmuje znaki z kodami z zakresu: U+20000 - U+2FFFF. SIP zawiera wyłacznie znaki japońskie, chińskie i koreańskie, które sa rzadko używane. Zakres kodów od U+30000 do U+DFFFF, czyli obszary kodowe od 3 do 13(D) nie sa jeszcze zagospodarowane. Obszar kodowy nr 14 (E) (ang. Supplementary Special-Purpose Plane, SSP) - obejmuje znaki z kodami z zakresu: U+E0000 - U+EFFFF SSP zawiera, m.in., dodatkowe znaki sterujace oraz zbiór alternatywnych glifów. Glif (glyf) to kształt przedstawiajacy w określonym kroju pisma konkretny grafem lub symbol 3. Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 25 / 38
Przestrzeń kodowa Unicode IV Klasyczny glif złożony z f i. Źródło: https://pl.wikipedia.org/wiki/glif_(typografia) Obszary kodowe nr 15(F) i 16(10) z zakresu kodowego od U+F0000 do U+10FFFF sa zarezerwowane do użytku prywatnego i moga być używane indywidualnie. Znaki te nie sa jasno określone przez Unicode Consortium. 3 https://pl.wikipedia.org/wiki/glif_(typografia) Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 26 / 38
Formy kodowania standardu Unicode Standardy kodowania znaków definiuja nie tylko jego wartość liczbowa (punkt kodowy), ale również ilość bitów na jakich ta wartość jest reprezentowana. Standard Unicode definiuje trzy formy kodowania, które pozwalaja aby te same dane reprezentowane były na 1 bajcie, 2 bajtach lub 4 bajtach (czyli za pomoca 8, 16 lub 32 bitów na tzw. code unit): UTF-8 UTF-16LE, UTF-16-BE UTF-32LE, UTF-32-BE Wszystkie trzy formy kodowania koduja ten sam zbiór znaków i moga być skutecznie przekształcony pomiędzy soba bez utraty danych. Wszystkie trzy formy kodowania potrzebuja co najwyżej 4 bajty (32 bity) na zakodowanie każdego znaku. Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 27 / 38
Formy kodowania standardu Unicode - UTF-8 I UTF-8 - najczęściej używany format kodowania znaków Unicode: UTF-8 wykorzystuje od 8 do 32 bitów do zakodowania pojedynczego znaku. UTF-8 jest w pełni kompatybilny z ASCII, tzn. stosowany jest tylko jeden bajt na znak i wartość tego bajtu jest taka sama jak w kodowaniu ASCII. UTF-8 jest szczególnie przydatny do tekstów, które składaja się głównie ze znaków ASCII lub ANSI i zawieraja tylko kilka innych znaków, jak to ma miejsce, na przykład, w języku angielskim lub tekstach języków europejskich. UTF-8 znaki łacińskie ze znakami diakrytycznymi (np. niemicki umlaut - Ä, Ö), lub litery greckie czy cyrylice koduje przy użyciu 2 bajtów. 4 bajty sa wykorzystywane wyłacznie do rzadko używanych znaków, takich jak nietypowe zanki chińskie, japońskie, czy koreańskich. Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 28 / 38
Formy kodowania standardu Unicode - UTF-8 II Wada UTF-8 jest większy rozmiar, gdy zamiast znaków ASCII lub ANSII stosowane sa znaki, których zakodowanie wymaga 3 lub 4 bajtów. Format UTF-8 nie ma problemów z Little endian and Big endian. Zawiera znacznik kolejności bajtów (ang. byte order mark, BOM) w postaci kodu 0xEF 0xBB 0xBF (takie krzaczki: ï» ). Nie zawiera bajtów 0xFF i 0xFE, więc łatwo można go odróżnić od tekstu UTF-16. Standard UTF-8 jest dominujacym kodowaniem znaków w sieci WWWeb; zastosowany jest w 85,0% wszystkich stron internetowych (stan na wrzesień 2015) roku. Internet Mail Consortium (IMC) zaleca, aby wszystkie programy do obsługi e-maila były w stanie wyświetlać i tworzyć mail za pomoca UTF-8, a W3C zaleca UTF-8 jako domyślne kodowania w XML i HTML. Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 29 / 38
Metody kodowania UTF-8 I Mapowanie znaków Unicode na ciagi bajtów zaproponowane przez Davea Prossera i lekko zmodyfikowane przez Kena Thompsona: Pierwszy i Ostatni Bajt 1 Bajt 2 Bajt 3 Bajt 4 punkt kodowy U+0000-U+007F 0xxxxxxx U+0080-U+07FF 110xxxxx 10xxxxxx U+0800-U+FFFF 1110xxxx 10xxxxxx 10xxxxxx U+10000-U+1FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx Znaki z przedziału ASCII (0 do 127) kodowane sa jako jeden bajt. Znaki diakrytyczne, np. polskie, kodowane sa jako dwa bajty Listopad 2003 - kodowanie UTF-8 zostaje ograniczone zgodnie z memo RFC 3629 do 0x10FFFF punktów kodowych, w celu zapewnienia zgodności z ograniczeniami systemu UTF-16. Oryginalna specyfikacja kodowania zakładała użycie nawet 6 bajtów. Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 30 / 38
Kodowanie UTF-8 - przykład (1 bajt) Kodowanie znaku $, który w Unicode ma punkt kodowy U+0024 implementowany na 1 bajcie (7 bitów punktu kodowego): Kod binarny: 010 0100 UTF-8 binarnie na 1 bajcie: 00100100 Kod szesnastkowy: 24 Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 31 / 38
Kodowanie UTF-8 - przykład (2 bajty) Kodowanie znaku c, który w Unicode ma punkt kodowy U+00A9 implementowany na 2 bajtach (11 bitów punktu kodowego): Kod binarny: 000 1010 1001 UTF-8 binarnie na 1 bajcie: 1100 0010 UTF-8 binarnie na 2 bajcie: 1010 1001 Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 32 / 38
Kodowanie UTF-8 - przykład (3 bajty) Kodowanie znaku e, który w Unicode ma punkt kodowy U+20AC implementowany na 3 bajtach (16 bitów punktu kodowego): 20AC 16 =0010 0000 1010 1100 2 po uzupełnieniu wiodacymi 0 do 16 bitów - tyle bitów należy zakodować na 3 bajtach w UTF-8. Kodowanie 1 bajta: Ustawiamy pierwsze 4 wiadace bity na 1110 Pozostałe bity pierwszego bajtu pochodza z 4 najstarszych bitów kodowanej wartości w Unicode, tj. 0010. Wynikowy 1 bajt: 11100010 Kodowanie 2 i 3 bajta: pozostałe bity, tj. 0000 1010 1100, dzielone sa na dwa bloki po 6 bitów każdy, tj. 000010 oraz 101100. do 6-bitowych bloków dodawane sa bity wiodace 10 Wynikowy 2 bajt: 1000 0010; Wynikowy 3 bajt: 1010 1100 Wynikowe kodowanie 3 bajtów: 11100010 10000010 10101100 = 0xE282AC. Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 33 / 38
Kodowanie UTF-8 - przykład (4 bajty) Kodowanie znaku gotyckiego Manna (M), który w Unicode ma punkt kodowy U+1033C implementowany na 4 bajtach (21 bitów punktu kodowego): Kod binarny: 0 0001 0000 0011 0011 1100 UTF-8 binarnie na 1 bajcie: 1111 0000 UTF-8 binarnie na 2 bajcie: 1001 0000 UTF-8 binarnie na 3 bajcie: 1000 1100 UTF-8 binarnie na 4 bajcie: 1011 1100 Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 34 / 38
Formy kodowania standardu Unicode - UTF-16 I UTF-16 jest jednym z najstarszych formatów kodowania Unicode. UTF-16 jest zoptymalizowany pod katem najczęściej używanych znaków (tj. znaków z obszaru BMP); znaki te kodowane sa przy pomocy 2 bajtów (16-bitów). Pozostałe znaki kodowane sa przy pomocy 4 bajtów (32-bitów). UTF-16 zawiera bajty 0xFF i 0xFE informujace o kolejności ustawienia bajtów; Big Endian: 0xFE 0xFF oraz Little Endian: 0xFF 0xFE; UTF-16 Little Endian jest używany do wewnętrznej reprezentacji ciagów znaków w systemie Windows 2000/XP/2003/Vista i to jest to co przez kodowaniem "Unicode"jest rozumiane w Notatniku Windows. UTF-16 Little Endian jest również używany do wewnętrznej reprezentacji ciagów znaków w innych systemach operacyjnych takich jak Mac OS X lub Symbian. Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 35 / 38
Formy kodowania standardu Unicode - UTF-32 I Każdy znak Unicode w formacie UTF-32 jest kodowany przy pomocy 4 bajtów (32-bitów). UTF-32 jest wykorzystywane wówczas, gdy wymagana jest stała reprezentacja znaków oraz pamięć nie stanowi problemu. UTF-32 może być implementowane zarówno jako Big Endian i Little Endian. UTF-32 zawiera bajty 0xFF i 0xFE informujace o kolejności ustawienia bajtów; Big Endian: 0x00 0x00 0xFE 0xFF oraz Little Endian: 0xFF 0xFE 0x00 0x00; Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 36 / 38
Konwersja kodowania $file wi05.tex wi05.tex: LaTeX 2e document, UTF-8 Unicode text $iconv -f utf8 -t utf-16 wi05.tex > wi05-16.tex $file wi05-16.tex wi05-16.tex: LaTeX 2e document, Little-endian UTF-16 Unicode text $iconv -f utf8 -t cp1250 wi05.tex > wi05-cp1250.tex $file wi05-cp1250.tex wi05-cp1250.tex: LaTeX 2e document, Non-ISO extended-a with LF, NEL line terminators Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 37 / 38
Konwersja kodowania $iconv --list Poniższa lista zawiera wszystkie znane zakodowane zestawy znaków. Nie oznacza to, że wszystkie kombinacj zestawów mogą być używane jako parametry OD i DO. Jeden zestaw znaków może znajdować się na liście pod wieloma nazwami (aliasami)...., ASCII,..., CP1250,.. ISO-8859-1, ISO-8859-2,..., ISO-8859-13, ISO-8859-14, ISO-8859-15, ISO-8859-16, UNICODE, UTF-7, UTF-8, UTF-16, UTF-16BE, UTF-16LE, UTF-32,..., WINDOWS-1250,... Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 5 38 / 38