Binární seřazená komprese pro Unicode - Binary Ordered Compression for Unicode
Binární seřazená komprese pro Unicode (BOCU) je MIM kompatibilní schéma komprese Unicode. BOCU-1 kombinuje širokou použitelnost UTF-8 s kompaktností Standardní schéma komprese pro Unicode (SCSU). Tento Unicode kódování je navržen tak, aby byl užitečný pro kompresi krátkých řetězců, a udržuje pořadí bodů kódu. BOCU-1 je uveden v technické poznámce k Unicode.[1]
Pro srovnání bylo SCSU přijato jako standardní schéma komprese Unicode s poměrem bajtů / kódových bodů podobným specifickému pro daný jazyk kódové stránky. SCSU nebyl široce přijat, protože není vhodný pro MIME „textové“ typy médií. Například SCSU nelze použít přímo v e-mailech a podobných protokolech. SCSU vyžaduje pro dobrý výkon komplikovaný design kodéru. Obvykle zip, bzip2 a další standardní průmyslové algoritmy efektivněji zhutňují větší množství textu Unicode.[2]
Oba SCSU[3] a BOCU-1[4] jsou IANA registrované znakové sady.
Detaily
Všechna čísla v této části jsou hexadecimální a všechny rozsahy jsou včetně.
Kódové body z U + 0000
na U + 0020
jsou kódovány v BOCU-1 jako odpovídající hodnota bajtu. Všechny ostatní body kódu (tj. U + 0021
přes U + D7FF
a U + E000
přes U + 10FFFF
) jsou kódovány jako rozdíl mezi bodem kódu a normalizovanou verzí naposledy kódovaného bodu kódu, který nebyl prostorem ASCII (U + 0020
). Počáteční stav je U + 0040
. Mapování normalizace je následující:
Rozsah kódu | Normalizovaný kódový bod | Poznámky |
---|---|---|
U + 3040 na U + 309F | U + 3070 | Hiragana |
U + 4E00 na U + 9FA5 | U + 7711 | Unihan |
U + AC00 na U + D7A3 | U + C1D1 | Hangul |
U + 0020 | stav kodéru zachován tak, jak je | Prostor |
U +hhhh00 na U +hhhh7F (kromě výše uvedených rozsahů) | U + hhhh40 | střední ze 128 |
U +hhhh80 na U +hhhhFF (kromě výše uvedených rozsahů) | U +hhhhC0 | střední ze 128 |
Rozdíl mezi aktuálním bodem kódu a normalizovaným předchozím bodem kódu je kódován následovně:
Rozdíl | Rozsah posloupnosti bajtů (viz. níže) |
---|---|
-10FF9F na -2DD0D | 21 F0 58 D9 na 21 FF FF FF |
-2DD0C na -2912 | 22 01 01 na 24 FF FF |
-2911 na -41 | 25 01 na 4F FF |
-40 na 3F | 50 na CF |
40 na 2910 | D0 01 na FA FF |
2911 na 2DD0B | FB 01 01 na FD FF FF |
2DD0C na 10FFBF | FE 01 01 01 na FE 19 B4 54 |
Každý bajtový rozsah je lexikograficky nařízeno s vyloučením následujících třinácti bajtových hodnot: 00 07 08 09 0A 0B 0C 0D 0E 0F 1A 1B 20
. Například sekvence bajtů FC 06 FF
, kódující rozdíl ve výši 1156B
, okamžitě následuje bajtová sekvence FC 10 01
, kódující rozdíl ve výši 1156C
.
Libovolný vstup ASCII U + 0000
na U + 007F
kromě prostoru U + 0020
resetuje kodér na U + 0040
. Protože výše uvedené hodnoty pokrývají body kódu řádku U + 000D
a U + 000A
jak je (0D 0A
), je kodér ve známém stavu na začátku každého řádku. Poškození jednoho bajtu proto ovlivňuje maximálně jeden řádek. Pro srovnání poškození jednoho bajtu v UTF-8 ovlivňuje maximálně jeden bod kódu pro SCSU může to ovlivnit celý dokument.
BOCU-1 nabízí podobnou robustnost i pro vstupní texty bez výše uvedených hodnot se speciálním resetovacím kódem 0xFF
. Když dekodér najde tento oktet, resetuje svůj stav na U + 0040
pokud jde o konec řádku. Použití 0xFF
resetovat bajty se ve specifikaci BOCU-1 nedoporučuje, protože je v rozporu s jinými cíli návrhu BOCU-1, zejména s binární objednávka.
Volitelné použití podpisu U + FEFF
na začátku textů kódovaných BOCU-1, tj. bajtová sekvence BOCU-1 FB EE 28
, změní počáteční stav U + 0040
na U + FEC0
. Jinými slovy, podpis nelze jednoduše odstranit jako ve většině ostatních schémat kódování Unicode. Přidání resetovacího bajtu po podpisu (FB EE 28 FF
) by se tomuto efektu mohlo vyhnout, ale specifikace BOCU-1 tento postup nedoporučuje.
Teoreticky UTF-1 a UTF-8 mohl zakódovat originál UCS-4 sada s 31 bity až 7FFFFFFF
. BOCU-1 a UTF-16 dokáže zakódovat moderní Unicode nastaveno od U + 0000
na U + 10FFFF
. S výjimkou třinácti chráněný lze použít kódové body kódované jako jednotlivé oktety BOCU-1 oktety ve vícebajtovém kódování. BOCU-1 potřebuje maximálně čtyři bajty skládající se z hlavního bajtu a jednoho až tří trasovacích bajtů. Bajty stezky kódují zbývající "modulo Rozdíl 243 "(základ 243), hlavní bajt určuje počet stopových bajtů a počáteční rozdíl. Pamatujte, že resetovací bajt 0xFF
není chráněný a může se objevit jako stopový bajt.
Patent
Obecný algoritmus BOCU je pokryt Patent Spojených států 6 737 994, který také zmiňuje konkrétní implementaci BOCU-1.[5] IBM, který v době svého vzniku zaměstnával oba vynálezce BOCU-1, uvádí v technické poznámce Unicode, že implementátoři „plně kompatibilní verze BOCU-1“ musí kontaktovat IBM a požádat o licenci bez licenčních poplatků.[6] BOCU-1 je jediné schéma komprese Unicode popsané na webu Unicode, o kterém je známo, že je zatíženo duševní vlastnictví omezení.
Naproti tomu IBM také požádala o patent na UTF-EBCDIC, ale v takovém případě se rozhodla provést dokumentaci a schéma kódování „Volně k dispozici komukoli, kdo se týká vytváření transformačního formátu jako součásti standardů UCS,“ místo toho, aby od implementátorů požadoval licenci.[7]
V HTML
Podpora BOCU-1 v HTML dokumenty zakazuje W3C[8][9] a WHATWG[10] Standardy HTML, jak by to představovalo a skriptování mezi weby zranitelnost.[11]
Reference
- ^ Markus Scherer, Mark Davis (2006-02-04). „UTN # 6: BOCU-1“. Citováno 2008-05-18.
- ^ Ewell, Doug (30.01.2004). „UTN # 14: An průzkum kompresí Unicode“ (PDF). Citováno 2008-06-13.
- ^ Registrační záznam IANA pro SCSU
- ^ Registrační záznam IANA pro BOCU-1
- ^ Davise; et al. (2004-05-18). „United States Patent # 6,737,994,“ binárně seřazená komprese pro unicode"". Citováno 2008-11-16.
- ^ Markus Scherer, Mark Davis (2006-02-04). „UTN # 6: BOCU-1“. Citováno 2014-02-05.
- ^ V.S. Umamaheswaran (16. 04. 2002). „UTR # 16: UTF-EBCDIC“. Citováno 2008-11-16.
- ^ „8.2.2.3. Kódování znaků“. HTML 5.1 Standard. W3C.
- ^ „8.2.2.3. Kódování znaků“. HTML 5 Standard. W3C.
- ^ "12.2.3.3 kódování znaků". Životní standard HTML. WHATWG.
- ^ „ - HTML“. Webové dokumenty MDN. Mozilla.
Viz také
- UTF-1 obsahuje srovnání UTF-1, UTF-8 a designy BOCU-1
- Mezinárodní komponenty pro Unicode Knihovna, která může převádět mezi BOCU-1 a jinými kódováními Unicode