GB18030 je čínská státní norma popisující jazykovou a znakovou podporu závaznou pro software prodávaný v Čínské lidové republice. Kromě definice „kódové stránky GB18030“ stanovuje, jaká písma musí být podporována, potřebné fonty, atd.
GB18030 je kódovaní registrované IANA[1] pro oficiální znakovou sadu pro Čínu, která nahrazuje kódování GB2312. Formální název standardu je „Čínský národní standard GB 18030-2005: Informační technologie – čínská kódovaná znaková sada“. GB je zkratka za Guójiā Biāozhǔn, 国家标准, což čínsky znamená národní standard. Standard byl publikován Čínským vydavatelstvím standardů v Pekingu 8. listopadu 2005. Povinná je pouze část standardu, a všechen software prodávaný v Čínské lidové republice musí od 1. května 2006 tuto povinnou podmnožinu GB18030 podporovat. Díky své ekvivalenci s Unicode podporuje GB18030 zjednodušené i tradiční čínské znaky.
Starší verze standardu, známá jako „Čínský národní standard GB 18030-2000: Informační technologie – kódovaná znaková sada čínských ideogramů pro výměnu informací – Rozšíření základní sady“, byla publikována 17. března 2000. Obě verze používají stejné kódovací schéma, došlo však k prohození kódových bodů pro znaky ḿ a ɟ. Nový standard definuje díky aktualizaci standardu Unicode více kódových bodů, především přidává Jednotné ideografické rozšíření CJK B. Také byly doplněny některé znaky používané etnickými menšinami v Číně, jako například mongolské znaky a tibetské znaky (GB 16959-1997 a GB/T 20542-2006).
GB18030 může reprezentovat celý rozsah kódových bodů Unicode, proto jej lze považovat za transformační formát Unicode. GB18030 je stejně jako UTF-8 nadmnožinou kódování ASCII a je také nadmnožinou kódování GB2312. GB 18030-2005 zachovává kompatibilitu se starší znakovou sadou a s kódovou stránkou 936 ve Windows, označovanou také jako GBK, což je rozšířená verze GB2312 firmy Microsoft, až na znak Euro, který má v pozdější verzi GBK od Microsoftu jednobytový kód 0x80 a v GB18030 dvoubytový kód A2 E3. GB 18030-2005 je také kompatibilní s „Chinese Internal Code Specification, Version 1.0“, známou jako GBK 1.0, která je mírným rozšířením Windows Codepage 936 z roku 1995. Pro 81 znaků však bylo mapování do Unicode změněno, protože těmto znakům byly v GBK 1.0 dočasně přiřazeny kódové body v Unicode oblastech pro soukromé použití (anglicky Private Use Areas, PUA), a později jim byl přidělen kód v Unicode. Tyto znaky jsou uvedeny v příloze E standardu GB 18030-2005. Ve standardu GB 18030-2005 zbývá 24 znaků, které jsou stále mapovány na oblasti pro soukromé použití v Unicode.
Součástí zobrazení dat je vyhledávací tabulka (podobně jako u GBK). Zbytek transformace se počítá algoritmicky. Nový standard naneštěstí zdědil špatné aspekty starších standardů, ze kterých vychází (hlavním je, že vyžaduje speciální kód pro bezpečné nalezení ASCII znaků v GB18030 řetězci).
Povinná část GB 18030-2005 sestává z jedno- a dvoubytových kódování, spolu s čtyřbytovými kódováními pro rozšíření CJK Unified Ideographs. Odpovídající kódové body Unicode této podmnožiny leží všechny v BMP.
Před uvedením standardu GB 18030-2005 v platnost používala většina velkých počítačových firem jako primární kódování pro své binární formáty a služby operačního systému některou verzi Unicode. Většina těchto kódování však podporovala pouze 16bitový rozsah kódových bodů definovaný v Unicode 1.0, který dovoluje používat nejvýše 65536 znaků z BMP. Novinkou ve verzi GB 18030-2005 je povinná podpora některých kódových bodů mimo BMP. To znamená, že software již nemůže považovat znaky za entity s pevnou šířkou 16 bitů (jako v kódování UCS-2), ale musí buď používat formát s proměnnou šířkou (např. UTF-8 nebo UTF-16) nebo přejít na formát s pevnou šířkou s větším rozsahem (např. UTF-32). Microsoft provedl změnu z UCS-2 na UTF-16 ve Windows 2000.
Pro podporu kódování GB18030 ve Windows 2000 musí být nainstalován balíček podpory GB18030 [1]. Windows XP podporují GB18030 nativně. Microsoft SQL Server nepodporuje (ani ve verzi SQL Server 2008) GB18030, protože místo UTF-16 používá UCS-2 (kromě použití varbinary blobů). Databáze PostgreSQL s otevřeným zdrojovým textem podporuje GB18030 díky své plné podpoře UTF-8.
Podpora kódování GB18030 ve Windows znamená, že funkce MultiByteToWideChar a WideCharToMultiByte podporují kódovou stránku 54936. Díky zpětné kompatibilitě lze mnoho souborů v kódování GB18030 úspěšně otevřít s podporou starší kódové stránky 936 (GBK), i když kódová stránka 54936 není podporována. To však platí pouze tehdy, když soubor obsahuje pouze GBK znaky. Pokud soubor obsahuje znaky, které v GBK neexistují, jeho načtení nebude úspěšné (viz příklady níže).
Balíček pro podporu GB18030 obsahuje sadu TrueTypových fontů SimSun18030.ttc, které kombinují dva čínské fonty, SimSun-18030 a NSimSun-18030.
Font SimSun 18030 obsahuje všechny znaky z Unicode 2.1 a nové znaky, které jsou v Unicode CJK Unified Ideographs Extension A, ale přes svoje jméno neobsahuje glyfy pro všechny znaky z GB 18030. Pomocí GB 18030 lze zakódovat více než milión kódových bodů z Unicode v intervalu 0 až U+10FFFF, tedy „font, který plně podporuje GB 18030“, znamená, že obsahuje glyfy pro všechny znaky Unicode, nejen pro znaky CJK. HAN NOM A a HAN NOM B [2] jsou volně dostupné fonty, které obsahují všechny znaky z Rozšíření A a Rozšíření B, a jsou úplnější než SimSun-18030 nebo Simsun (Founder Extended), ale stejně nepodporují všechny kódové body definované v Unicode 5.0.0.
Čtyřbytové kódy můžeme považovat za složené ze dvou dvoubytových jednotek. Každá jednotka má podobný formát jako dvoubytové znaky GBK, ale hodnota druhého bytu leží v intervalu 0x30–0x39 (což jsou ASCII kódy pro desítkové číslice). Hodnota prvního bytu leží v intervalu 0x81 až 0xFE, jako dříve. To znamená, že funkce pro hledání řetězců, které jsou bezpečné pro GBK, musí být také bezpečné pro GB18030 (stejně jako je základní bytově orientované vyhledávání bezpečné pro kódování EUC). To dává celkem 1587600 (126×10×126×10) možných čtyřbytových posloupností, což bohatě postačuje na pokrytí 1111998 přiřazených a rezervovaných kódových bodů z Unicode (17×65536 – 2048 kódů pro náhradních páry v UTF-16 – 66 ne-znaků). (Náhradní páry a ne-znaky jsou považovány za navržené ale ne přiřazené.)
Naneštěstí neexistují jednoduchá pravidla pro převod mezi čtyřbytovou posloupností a jí odpovídajícím kódovým bodem. Místo toho jsou kódy alokovány sekvenčně (přičemž první byte obsahuje nejvýznamnější část a poslední byte nejméně významnou část) pouze pro kódové body Unicode, které nejsou mapované jinak. Například:
U+00DE (Þ) → 81 30 89 37 U+00DF (ß) → 81 30 89 38 U+00E0 (à) → A8 A4 U+00E1 (á) → A8 A2 U+00E2 (â) → 81 30 89 39 U+00E3 (ã) → 81 30 8A 30
V tomto článku byl použit překlad textu z článku GB 18030 na anglické Wikipedii.