# GBK (Zeichensatz)

Windows-Codepages :
| 0874 | Thai |
| 0932 | Japanisch |
| 0936 | Vereinfachtes Chinesisch |
| 0949 | Koreanisch |
| 0950 | Traditionelles Chinesisch |
| 1200 | Unicode UTF-16, little endian |
| 1201 | Unicode UTF-16, big endian |
| 1250 | Mitteleuropäisch |
| 1251 | Kyrillisch |
| 1252 | Westeuropäisch |
| 1253 | Griechisch |
| 1254 | Türkisch |
| 1255 | Hebräisch |
| 1256 | Arabisch |
| 1257 | Baltisch |
| 1258 | Vietnamesisch |
| 12000 | Unicode UTF-32, little endian |
| 12001 | Unicode UTF-32, big endian |
| 65000 | Unicode UTF-7 |
| 65001 | Unicode UTF-8 |
GBK (kurz für chinesisch 国家标准扩展, Pinyin Guójiā biāozhǔn kuòzhǎn; von GB Standard sowie chinesisch 汉字内码扩展规范, Pinyin Hànzì nèimǎ kuòzhǎn guīfàn, englisch Chinese Internal Code Specification) ist ein chinesischer Zeichensatz. Er erweitert GB2312 um traditionelle Schriftzeichen sowie um Schriftzeichen, die nach der Einführung von GB2312 1981 vereinfacht wurden.

## Geschichte

1993 wurde Unicode 1.1 veröffentlicht, das 20.902 chinesische Schriftzeichen enthält. Die chinesische Regierung hat daraufhin GB13000.1-93 veröffentlicht, welcher identisch mit Unicode 1.1 ist. Um die Lücke zwischen diesem Standard und dem älteren GB2312 (1980) zu überbrücken, wurde auch GBK eingeführt, das GB2312 um die Zeichen aus GB13000.1-93 erweitert. Weil GBK jedoch nie zur offiziellen Norm wurde, erhielt es auch keine reguläre GB-Nummer. 1995 wurde GBK um 95 weitere Schriftzeichen erweitert.
In Windows 95 wurde GBK als Codepage 936 in unveränderter Form übernommen. Dadurch stieg die Verbreitung von GBK enorm, und GBK wurde zum De-facto-Standard. Später wurde das Eurozeichen zur Codepage 936 hinzugefügt, was die Codepage inkompatibel zu GBK machte.
In den meisten Windows-Varianten wird GBK jedoch irreführend als GB2312 bezeichnet. Erst ab Windows XP wurde zusätzlich auch die ursprüngliche Norm GB2312 unter Windows angeboten, und zwar unter der Codepage-Nummer 20936 mit der Bezeichnung "GB2312-80".
Seit 2000 ist GBK offiziell von GB 18030 abgelöst.

## Aufbau

GBK ist eine variable 16-Bit-Kodierung, d. h. ein Zeichen kann entweder ein oder zwei Byte groß sein. Die Zeichen im Bereich 00$_{hex}$-7F$_{hex}$ sind identisch zu ASCII und bestehen aus nur einem Byte. Die Zeichen im Bereich 81$_{hex}$-FE$_{hex}$ hingegen bestehen aus zwei Bytes.
Ein in GBK kodierter Text kann nur vorwärts durchsucht werden, da bei einem beliebigen Zeichen nicht unterschieden werden kann, ob es Anfangsbyte oder Endebyte einer Zweibyte-Kodierung ist. Zur Unterscheidung muss der Text von Anfang an untersucht werden. Diese nachteilige Eigenschaft hat GBK mit GB2312 und GB18030 und den anderen asiatischen Kodierungen SHIFT-JIS (japanisch), BIG-5 (traditionelles Chinesisch) und EUC-KR (koreanisch) gemeinsam.
Bei GB2312 kann auch ein durch Rückwärtssuche gefundenes ASCII-Zeichen (Bytewert kleiner als 128) als Ausgangspunkt für eine Vorwärtsanalyse verwendet werden, da diese Werte nicht in Zwei-Byte-Zeichen enthalten sind; bei GBK reduziert sich diese Möglichkeit auf ASCII-Zeichen im Bereich 0 bis 63, da auch Bytewerte im Bereich 64 bis 127 als End-Byte eines Zwei-Byte-Zeichens verwendet werden.
Dieses Problem vermeidet die Unicode-Transformation UTF-8. Obwohl hier auch bis zu vier Byte pro Zeichen benötigt werden, kann doch von jedem Byte eindeutig gesagt werden, ob es ein Ein-Byte-Zeichen, ein Anfangs-Byte eines Mehr-Byte-Zeichens oder ein Folge- oder End-Byte eines Mehr-Byte-Zeichens ist.
Der Zwei-Byte-Bereich ist in acht Ebenen eingeteilt:
GBK-Levels :
| Level | 1. Byte | 2. Byte | Verfügbare Codepunkte | Zeichen | Zeichen | Zeichen |
| Level | 1. Byte | 2. Byte | Verfügbare Codepunkte | GB 18030 | GBK 1.0 | GB 2312 |
| Level GBK/1 | A1–A9 | A1–FE | 846 | 728 | 717 | 682 |
| Level GBK/2 | B0–F7 | A1–FE | 6768 | 6763 | 6763 | 6763 |
| Level GBK/3 | 81–A0 | 40–FE außer 7F | 6080 | 6080 | 6080 |
| Level GBK/4 | AA–FE | 40–A0 außer 7F | 8160 | 8160 | 8160 |
| Level GBK/5 | A8–A9 | 40–A0 außer 7F | 192 | 166 | 166 |
| benutzerdefiniert | AA–AF | A1–FE | 564 | | | |
| benutzerdefiniert | F8–FE | A1–FE | 658 | | | |
| benutzerdefiniert | A1–A7 | 40–A0 außer 7F | 672 | | | |
| insgesamt: | | | 23.940 | 21.897 | 21.886 | 7.445 |
| Code | …0 | …1 | …2 | …3 | …4 | …5 | …6 | …7 | …8 | …9 | …A | …B | …C | …D | …E | …F |
| 0… | NUL | SOH | STX | ETX | EOT | ENQ | ACK | BEL | BS | HT | LF | VT | FF | CR | SO | SI |
| 1… | DLE | DC1 | DC2 | DC3 | DC4 | NAK | SYN | ETB | CAN | EM | SUB | ESC | FS | GS | RS | US |
| 2… | SP | ! | " | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / |
| 3… | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? |
| 4… | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. |
| 5… | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. |
| 6… | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. | ASCII oder zweites Byte einer zwei Byte langen Sequenz. |
| 7… | | | | | | | | | | | | | | | | DEL |
| 8… | | | | | | | | | | | | | | | | |
| 9… | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. |
| A… | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. |
| B… | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. |
| C… | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. |
| D… | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. |
| E… | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. | Erstes oder zweites Byte einer zwei Byte langen Sequenz. |
| F… | | | | | | | | | | | | | | | | |
| | …0 | …1 | …2 | …3 | …4 | …5 | …6 | …7 | …8 | …9 | …A | …B | …C | …D | …E | …F |