Для европейских языков 256 позиций восьмибитной таблицы было достаточно, но для китайского такой объём оказался смехотворно мал. Только в повседневном употреблении находятся несколько тысяч иероглифов, а в словарях их десятки тысяч. Поэтому китайские кодировки с самого начала строились иначе: каждый иероглиф в них записывается двумя байтами. GBK стала самой распространённой из таких кодировок для упрощённого китайского письма, принятого в континентальном Китае и Сингапуре.
История GBK начинается с национального стандарта GB 2312, утверждённого в 1980 году. Буквы GB означают "Гоцзя бяочжунь", то есть "государственный стандарт". GB 2312 содержал 6763 иероглифа, латиницу, греческий алфавит, кириллицу, японскую азбуку и различные символы. Для большинства текстов этого хватало, но многие редкие иероглифы, особенно в именах людей и географических названиях, в стандарт не попали. В 1995 году появилось расширение GBK, где буква K означает "кочжань", то есть "расширение". В нём уже более 21 тысячи иероглифов, включая все иероглифы традиционного письма из Юникода того времени.
Устроена кодировка так. Символы ASCII записываются одним байтом, как обычно, а все остальные занимают два байта. Первый байт двухбайтовой последовательности всегда больше 127, и по нему программа понимает, что следующий байт относится к тому же символу. Второй байт может быть как больше, так и меньше 127. Это делает GBK компактной: китайский текст занимает в ней по два байта на иероглиф, тогда как в UTF-8 на тот же иероглиф уходит три байта.
В GBK есть и кириллица, унаследованная от GB 2312. Русские буквы записываются двумя байтами, причём первый байт у всех них одинаков. Поэтому русский текст в GBK, ошибочно прочитанный как Windows-1251, выглядит очень узнаваемо: каждая буква превращается в знак параграфа "§" и ещё один символ. Слово "Привет" превращается в "§±§в§Ъ§У§Ц§д". Такую ошибку можно встретить в документах, созданных на компьютерах с китайскими настройками.
Обычные ошибки с китайским текстом выглядят по-разному в зависимости от направления. Слово "你好", то есть "здравствуйте", записанное в GBK и открытое как Windows-1252, превращается в "ÄãºÃ", а при чтении в Windows-1251 в "ДгєГ". Если же текст в UTF-8 прочитать как GBK, получаются другие иероглифы, и "你好" превращается в "浣犲ソ". Для человека, не знающего китайского, такую ошибку заметить трудно, ведь на экране по-прежнему иероглифы.
Среди китайских пользователей стала знаменитой бессмысленная фраза "锟斤拷". Она появляется, когда текст сначала проходит через UTF-8 и теряет часть символов, заменяемых знаком замены, а затем читается как GBK. Байты двух знаков замены в UTF-8 в GBK образуют именно эти три иероглифа. Фраза "锟斤拷" стала в Китае шуткой и символом любых проблем с кодировками, примерно как слово "кракозябры" у русскоязычных пользователей.
В Windows эта кодировка называется кодовой страницей 936, и долгое время она была основной для китайского текста в этой системе. Сегодня большинство китайских сайтов перешли на UTF-8, но GBK по-прежнему встречается в старых документах, базах данных, играх и программах. Если в тексте вместо китайских иероглифов стоят латинские буквы с акцентами или кириллица, укажите GBK исходной кодировкой и преобразуйте текст в UTF-8.