Wstep do Informatyki
Transkrypt
Wstep do Informatyki
Wstep ˛ do Informatyki dr hab. Bożena Woźna-Szcześniak, prof. AJD [email protected] Jan Długosz University, Poland Wykład 5 Bożena Woźna-Szcześniak (AJD) Wstep ˛ 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 nastepuj ˛ acych ˛ 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) Wstep ˛ do Informatyki Wykład 5 2 / 38 ASCII ASCII - najcz˛eś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) Wstep ˛ do Informatyki Wykład 5 3 / 38 ASCII Znaki ASCII dziela˛ sie˛ 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) Wstep ˛ do Informatyki Wykład 5 4 / 38 ASCII Znaki ASCII dziela˛ sie˛ 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 dostepna ˛ jest np. na: https://pl.wikipedia.org/wiki/ASCII Bożena Woźna-Szcześniak (AJD) Wstep ˛ 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) Wstep ˛ do Informatyki Wykład 5 5 / 38 Rozszerzony ASCII I Rozszerzony ASCII lub Extended ASCII lub ANSI zapisuje znaki na 8-bitach, czyli dzieki ˛ zagospodarowaniu ósmego bitu zawiera 256 znaków. Dzieki ˛ 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, nastepne ˛ 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˛ sie˛ 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 bedzie ˛ można go w ogóle odczytać. Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 5 6 / 38 Rozszerzony ASCII II Miedzynarodowa ˛ 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) Wstep ˛ 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) Wstep ˛ 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 jezykó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) Wstep ˛ 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) Wstep ˛ do Informatyki Wykład 5 10 / 38 Problemy stron kodowych Każdy jezyk ˛ lub grupa jezyków ˛ ma własne kodowanie. Różni producenci lub komitety normalizacyjne opracowuja˛ różne kodowania, a co za tym idzie generalnie każdy jezyk ˛ ma kilka, cz˛esto niekompatybilnych, kodowań, np. Windows-1250 i ISO-8859-2. Zastosowanie strony kodowej do nowego jezyka ˛ wymaga jej przystosowania do reprezentacji znaków tego jezyka. ˛ Nie można łatwo mieszać wielu jezyków ˛ w jednym dokumencie lub systemie. Nie można łatwo przenosić dokumentów pomiedzy ˛ różnymi programami i systemami operacyjnymi. Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 5 11 / 38 Problemy stron kodowych Każdy jezyk ˛ lub grupa jezyków ˛ ma własne kodowanie. Różni producenci lub komitety normalizacyjne opracowuja˛ różne kodowania, a co za tym idzie generalnie każdy jezyk ˛ ma kilka, cz˛esto niekompatybilnych, kodowań, np. Windows-1250 i ISO-8859-2. Zastosowanie strony kodowej do nowego jezyka ˛ wymaga jej przystosowania do reprezentacji znaków tego jezyka. ˛ Nie można łatwo mieszać wielu jezyków ˛ w jednym dokumencie lub systemie. Nie można łatwo przenosić dokumentów pomiedzy ˛ różnymi programami i systemami operacyjnymi. Recepta na powyższe problemy: O PRACOWANIE UNIWERSALNEGO STANDARDU KODOWANIA WSZYSTKICH ZNAKÓW Z WSZYSTKICH J EZYKÓW ˛ WYST EPUJ ˛ ACYCH ˛ ( LUB KTÓRE WYST EPOWAŁY ˛ ) NA ŚWIECIE Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 5 11 / 38 Cz˛eściowa realizacja recepty - Unicode Unicode zapewnia wygodna˛ obsługe˛ tekstów w dowolnym jezyku, ˛ ich przenośność pomiedzy ˛ programami i systemami operacyjnymi, a także wymiane˛ dokumentów z osobami z całego świata. Unicode zapewnia autorom ksiażek ˛ i naukowcom (zwłaszcza lingwistom), że cytaty w obcych jezykach ˛ (nawet archaicznych i wymarłych), zapisy fonetyczne, dodatkowe symbole akcentowe, itp. sa˛ łatwo dostepne, ˛ 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) Wstep ˛ 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 sie˛ Unicode 1.0.0 Czerwiec 1993 - ukazuje sie˛ Unicode 1.1.0 Lipiec 1996 - ukazuje sie˛ Unicode 2.0.0 Maj 1998 - ukazuje sie˛ Unicode 2.1.2 Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 5 13 / 38 Hostoria standardu Unicode II Sierpień 1998 - ukazuje sie˛ Unicode 2.1.5 Grudzień 1998 - ukazuje sie˛ Unicode 2.1.8 Kwiecień 1999 - ukazuje sie˛ Unicode 2.1.9 Wrzesień 1999 - ukazuje sie˛ Unicode 3.0.0 Sierpień 2000 - ukazuje sie˛ Unicode 3.0.1 Marzec 2001 - ukazuje sie˛ Unicode 3.1.0 Sierpień 2001 - ukazuje sie˛ Unicode 3.1.1 Marzec 2002 - ukazuje sie˛ Unicode 3.2.0 Kwiecień 2003 - ukazuje sie˛ Unicode 4.0.0 Marzec 2004 - ukazuje sie˛ Unicode 4.0.1 31 Marzec 2005 - ukazuje sie˛ Unicode 4.1.0 14 Lipiec 2006 - ukazuje sie˛ Unicode 5.0.0 4 Kwiecień 2008 - ukazuje sie˛ Unicode 5.1.0 1 Październik 2009 - ukazuje sie˛ Unicode 5.2.0 11 Październik 2010 - ukazuje sie˛ Unicode 6.0.0 31 Styczeń 2012 - ukazuje sie˛ Unicode 6.1.0 26 wrzesień 2012 - ukazuje sie˛ Unicode 6.2.0 30 wrzesień 2013 - ukazuje sie˛ Unicode 6.3.0 Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 5 14 / 38 Hostoria standardu Unicode III 16 Czerwiec 2014 - ukazuje sie˛ Unicode 7.0.0 17 Czerwiec 2015 - ukazuje sie˛ Unicode 8.0.0 Bożena Woźna-Szcześniak (AJD) Wstep ˛ 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˛ detekcje˛ formy kodowania Unicode. BOM powieksza ˛ rozmiar danych o kilka bajtów. Bożena Woźna-Szcześniak (AJD) Wstep ˛ 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) Wstep ˛ 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 jezyku ˛ i dotyczacych ˛ każdej dziedziny współczesnego świata. Ponadto, obsługuje klasyczne i historyczne teksty zapisane wielu jezykach. ˛ Unicode jest rozwijany jest przez The Unicode Consortium, w którego skład wchodza˛ ważne firmy komputerowe, producenci oprogramowania, instytuty naukowe, agencje miedzynarodowe ˛ oraz grupy zainteresowanych użytkowników. Bożena Woźna-Szcześniak (AJD) Wstep ˛ 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 sie˛ 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 miedzynarodowej ˛ normy ISO/IEC 10646. Bożena Woźna-Szcześniak (AJD) Wstep ˛ 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 jezyków ˛ i pism na świecie. Zestaw zawiera około 100 000 abstrakcyjnych znaków, z których każdy posiada unikalna˛ nazwe˛ 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 nazwe˛ 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) Wstep ˛ 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 jezykach ˛ 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 ˛ artykulacje˛ tej litery i tworzace ˛ przez to nowa˛ litere. ˛ W alfabetach sylabowych moga˛ zmienić znaczenie całej sylaby1 . W jezyku ˛ polskim jest dziewieć ˛ liter tworzonych za pomoca˛ znaków diakrytycznych (litery diakrytyzowane, litery diakrytyczne): a, ˛ ć, e, ˛ ł, ń, ó, ś, ź, ż. Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 5 21 / 38 Jakie znaki zawiera Standard Unicode ? II Ideogram to umowny znak graficzny lub pisemny wyrażajacy ˛ określone pojecie ˛ bez użycia liter. Ideogramami posługuje sie˛ współcześnie pismo chińskie2 . Ź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 2 https://pl.wikipedia.org/wiki/Znaki_diakrytyczne https://pl.wikipedia.org/wiki/Ideogram Bożena Woźna-Szcześniak (AJD) Wstep ˛ do Informatyki Wykład 5 22 / 38 Przestrzeń kodowa Unicode I Przestrzeń kodowa Unicode podzielona jest na 17 obszarów kodowych ponumerowanych nastepuj ˛ aco: ˛ 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) Wstep ˛ 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˛ sie˛ 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) Wstep ˛ 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 symbol3 . Bożena Woźna-Szcześniak (AJD) Wstep ˛ 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) Wstep ˛ 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 pomiedzy ˛ 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) Wstep ˛ do Informatyki Wykład 5 27 / 38 Formy kodowania standardu Unicode - UTF-8 I UTF-8 - najcz˛eś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˛ sie˛ głównie ze znaków ASCII lub ANSI i zawieraja˛ tylko kilka innych znaków, jak to ma miejsce, na przykład, w jezyku ˛ angielskim lub tekstach jezykó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) Wstep ˛ do Informatyki Wykład 5 28 / 38 Formy kodowania standardu Unicode - UTF-8 II Wada˛ UTF-8 jest wiekszy ˛ 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, wiec ˛ ł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) Wstep ˛ 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 punkt kodowy U+0000-U+007F U+0080-U+07FF U+0800-U+FFFF U+10000-U+1FFFFF Bajt 1 Bajt 2 Bajt 3 Bajt 4 0xxxxxxx 110xxxxx 1110xxxx 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 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) Wstep ˛ 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) Wstep ˛ do Informatyki Wykład 5 31 / 38 Kodowanie UTF-8 - przykład (2 bajty) c który w Unicode ma punkt kodowy U+00A9 Kodowanie znaku , 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) Wstep ˛ 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): 20AC16 =0010 0000 1010 11002 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) Wstep ˛ 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) Wstep ˛ 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˛eś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 wewnetrznej ˛ 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 wewnetrznej ˛ reprezentacji ciagów ˛ znaków w innych systemach operacyjnych takich jak Mac OS X lub Symbian. Bożena Woźna-Szcześniak (AJD) Wstep ˛ 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 pamieć ˛ 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) Wstep ˛ 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) Wstep ˛ 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 moga˛ być używane jako parametry OD i DO. Jeden zestaw znaków może znajdować si˛ e 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) Wstep ˛ do Informatyki Wykład 5 38 / 38