Select Git revision
-
Martin Mareš authoredMartin Mareš authored
tahak.txt 5.61 KiB
Unicode
=======
Historie: 5 -> 6 -> 7 -> 8 -> 16 -> 16+ bitů na znak
Odkazy na Unicode 13.0.0: [s1] -> stránka standardu, [x01] -> example z code charts
- snaží se reprezentovat znaky všech světových abeced
- reprezentuje znaky (sémantiku), nikoli glyfy (konkrétní grafickou podobu)
- snaží se o vztah 1:1 se všemi používanými kódováními => nesystematičnosti
- též standardizováno jako ISO 10646
### Codepointy ###
- prostor velikosti 17 x 2^16 = 1114112
- v Unicode 15.0 obsazeno cca 149k codepointů
- 0000-007f: ASCII včetně řídicích znaků [x00]
- 0080-00ff: iso-8859-1 včetně řídicích znaků [x02]
- rozšířená latinka 1 [x05]
- pre-komponované znaky s diakritikou
- 0130, 0131: turecká i (locale-dependent vztah velké<->malé)
- rozšířená latinka 2 [x06]
- podivná písmena používaná třeba v afrických jazycích
- 01C4-01C7: chorvatské dvojznaky (rozlišení uppercase/lowercase/titlecase)
- fonetická abeceda (IPA) [x09]
- řečtina a koptština [x20]
- nejrůznější varianty cyrilice [x25]
- hlaholice [x26]
- gruzínština [x30]
- futhark [x32]
- egyptské hieroglyfy [x33]
- CJK = unifikovaná čínština + japonština + korejština [e.g. x35]
- disk z Faistu [x37]
- kombinující diakritika [x40]
- výjimky pro i, j [s318]
- obecně může být shaping složitý [s83]
- všelijaká interpunkce [x41]
- mezery různých šířek [s290]
- zero-width (no)breaking space
- word joiner (na tomto místě se nesmí zlomit řádek)
- zero-width (non-)joiner (týká se ligatur)
- různé pomlčky [s292]
- soft hyphen
- uvozovky [s295]
- symboly
- šipky [x50]
- technické symboly [x51]
- 237C: nikdo neví, co znamená :)
- všehochuť [x52, x53]
- skládačka rámečků [x55]
- emotikony [x58] (z toho se později vyvinulo emoji)
- speciální notace
- hudební [x60]
- Braille [x62]
- domino [x63]
- šachy [x52, x64]
- karty [x65]
- math
- matematické symboly [x70, x71, x72]
- letter-like symboly [x73]
- šipečky [např. x74]
- matematické varianty [x75]
- 2063 invisible separator (třeba v M_{ij})
- 2062 invisible times (neznačené násobení)
- 2064 invisible plus (třeba v "1 3/4")
- zpětná kompatibilita
- pre-komponované znaky
- zlomky a římská čísla [x81]
- ligatury [x83]
- mnoho konců řádků: 000D CR, 000A LF, CR+LF, 0085 NEL,
2028 line separator, 2029 paragraph separator
- private-use oblasti: E000-F8FF, F0000-FFFFD, 100000-10FFFD
- neoficiální registr privátních znaků (třeba klingonština)
- non-characters
- FFF9, FFFA, FFFB: inter-lineární anotace [s938]
- FFFC: object replacement characters (sem se vloží objekt dodaný OOB)
- FFFD: replacement character
- FFFE není definováno, FEFF je zero-width no-break space (BOM)
- variation sequences
- FE00-FE0F: selektor grafické varianty
- UCD/StandardizedVariants.txt
- také se používají pro emoji
- embedded tags
- E0000-E007F je kopie ASCII používaná k tagování + introducers + cancel tag
- language tagy (deprecated)
- také se používají pro emoji
### Reprezentace ###
- UCS-2
- historické: pouze 2^16 codepointů
- BE+LE varianta, potřebuje BOM (standard říká, že bez BOM je to BE)
- UCS-4 alias UTF-32 (BE+LE varianta)
- UTF-16
- reprezentace všech codepointů pomocí 16bitových kódů
- surrogates: D800-DBFF high, DC00-DFFF low
- UTF-8
- nadmnožina ASCII, ostatní znaky mají 2 až 4 byty
- podmínky na normalizaci: <0x110000, nejkratší kód
- neoficiální rozšíření na 64-bitová čísla (Perl5)
- samosynchronizující, zachovává lexikografické pořadí
- nešvar s BOM
- UTF-7, Punycode a další
### Tabulky vlastností ###
- UnicodeData.txt:
- jméno
- general category [s199]
- způsob zobrazování (např. směr psaní)
- upper/lower/titlecase mappings
- numerická hodnota
- dekompozice (normální a <compat>)
- canonical combining class
- PropList.txt: další binární vlastnosti
- NamesList.txt: alternativní jména (též pokud kanonické jméno obsahuje překlep)
- Scripts.txt: ke kterému písmu co patří
- SpecialCasing.txt: výjimky z case-folding algoritmů
### Normální formy ###
- kanonická dekompozice (NFD)
- akcenty uspořádány podle combining class
- v rámci combining class pořadí zachováno
- kanonická kompozice (NFC)
- používáme pre-komponované znaky, kdekoliv možno
- kompatibilní (de)kompozice (NFKD, NFKC)
- standard slibuje stabilitu normálních forem
### Problémy ###
- kódování znaků není jednoznačné (rozložené vs. složené znaky),
je nutné pečlivě normalizovat => problémy s bezpečností, s filesystémy
- podobné problémy s UTF-8 / UTF-16, pokud se dekóduje ledabyle
- stejně vypadající znaky => phishing
### Emoji ###
- <JP: e (obrázek) + moji (znak)
- "obrázkové" codepointy s variation selectorem:
- VS16 = emoji (barevné)
- VS15 = text (černobílé)
https://emojipedia.org/
-> "czechia" - flag sequences
-> "ch-zh" - tag sequences (momentálně jen pro vlajky regionů)
-> "person running" - univerzální
-> "man running" - person running + ZWJ + male sign
-> combining skin tone modifiers
-> ZWJ + hair color
-> "black cat" - cat + ZWJ + black square
-> "astronaut" - person + ZWJ + rocket
-> "polar bear" - bear + ZWJ + snowflake
-> "family" - složitější konstrukce se ZWJ
-> "roger" - pirate flag = blackflag + ZWJ + skull and crossbones
### Odkazy ###
https://shapecatcher.com/
https://r12a.github.io/uniview/
https://notofonts.github.io/