Относно кодирането на символи

Национални кодировки

Дефиниции

Нека започнем с дефиниране на понятия. Съвременните компютри съхраняват цялата информация под формата на двоични байтове, тоест 8-битови единици, които могат да приемат стойност от 0 до 255. За да съхраняваме не цифрова, а текстова информация в паметта на компютъра, трябва да определим кой байт или байта всеки символ, който може да се появи в нашия текст, ще бъде кодиран. Това съответствие между символите и техните байтове за кодиране се нарича набор от символи. Лесно е да се разбере, първо, че всяко кодиране е разработено за определен човешки език (по-точно, за конкретна система за писане), и, второ, че за всеки език такива кодировки могат да бъдат измислени, колкото искате. Познавайки човешката природа, е лесно да се досетим, че те ще измислят много повече от необходимото. Естествено се случи така: най-модерната библиотека от функции за прекодиране ICU (International Components for Unicode) от IBM Corporation поддържа над 170 различни кодировки.

Латински кодировки

Нека разгледаме по-отблизо кодирането на тези скриптове, които най-често се срещат от руски разработчик, т.е. латиница и кирилица. За латинската азбука днес се използват две основни кодировки: ASCII и EBCDIC. ASCII (Американски стандартен код за обмен на информация) ? това е седембитова таблица с кодове (кодове с символи 00-7F или 0-127 след десетичната запетая), която се превърна в стандарт за малки и средни компютри и следователно в стандарт за мрежата. Съдържа байтове с шестнадесетични кодове 00 ? 1F и 7F се използват за кодиране на контролни (непредставящи се) символи, а останалите кодират следните символи:

кодовата таблица

EBCDIC (разширен двоично кодиран десетичен код за обмен) ? това е осембитово кодиране (символни кодове 00 - FF или 0 - 255 десетични), прието на всички компютри на IBM, с изключение на компютри. Може да не искаме да го споменаваме, но тъй като XML се развива като основен формат за пренос на данни в мрежата, все по-често ще попадаме на XML файлове, генерирани на големи машини. Тук байтове с кодове 00 ? 3F кодират контролни знаци, а останалите се използват по следния начин:

кодови таблици

Кодировки на кирилица

Кодировките на "нелатински" азбучни скриптове са подредени по следния начин. Те се кодират в осембитова таблица (1 байт = 1 знак), т.е. числа 00 - FF (0 - 255 десетични), така че долната половина на кодовата таблица (кодове 00 - 7F или 0 - 127 десетични) съответства на ASCII, а горната половина (кодове 80 - FF или 128 - 255 десетични) съдържа националното кодиране, т.е. руски букви в руски кодови таблици, турски букви на турски и т.н. Тази организация на националните кодови таблици ви позволява правилно да показвате и обработва латински букви, цифри и пунктуационни знаци на всеки компютър, независимо от системните му настройки. Точно по този начин са подредени по-специално руските кодови таблици, така че да можем да разгледаме по-нататък само по-старата половина от тях.

История на руските кодировки ? това е пример за объркване, рядко срещано дори за нашата компютърна реалност. Съветските стандартизационни организации приеха GOST, производителите на компютри (Apple) и операционни системи (Microsoft) единодушно ги игнорираха и въведоха свои собствени кодировки. В резултат на това наследихме четири различни GOST, две кодировки от Microsoft (за DOS и за Windows) и кодиране от Apple за Mac (всички, разбира се, са несъвместими помежду си). Тези, които се интересуват от подробностите, могат да се обърнат към страницата The Cyrillic Charset Soup.

За щастие днес няма нужда да описваме подробно всички тези кодировки, тъй като само две от тях са оцелели в Рунета. Първо ? това е KOI8-R (KOI означава Код за обмен и обработка на информация, P различава руската кодова таблица от украинската KOI8-U). KOI8-R е регистриран от Андрей Чернов от Relcom като RFC 1489 и има формата:

символи

KOI8-R е де факто стандарт за всички интернет услуги с изключение на WWW. По-специално, всички услуги за електронна поща и новини в Runet работят в това кодиране. В мрежата ситуацията е по-сложна. Факт е, че повече от 90% от клиентските компютри в мрежата работят с Windows с различни версии. Windows използва собствено кодиране на руски букви, което обикновено се именува с номера на кодовата страница Windows-1251 или CP1251:

кодовата таблица

Двубайтово кодиране

Не бива да се мисли, че всички национални кодировки са байтови, тоест те следват правилото: 1 знак = 1 байт. Всъщност това важи само за буквени (буквено-цифрови) системи за писане. От друга страна, съществуват сричкови системи за писане, при които всеки символ представлява не звук, а сричка, например индийски и далекоизточни сричкови азбуки. Тъй като в езика има много повече срички, отколкото отделни звуци, по-старите 128 байта от кодовата таблица просто не са достатъчни, за да ги представят. Това води до факта, че такива скриптове използват двубайтови набори символи (DBCS, Double Byte Character Sets). Типичен пример за такова кодиране е японското JIS кодиране, което съществува в няколко вкуса. Той обхваща латински букви и цифри, както японски сричкови азбуки (катакана и хирагана), така и най-важните от китайските символи. Но пълноценното представяне на йероглифните писмености на Китай, Япония и Корея, наброяващо няколко хиляди йероглифи, остава невъзможно в рамките на националните кодировки.

Недостатъци на националните кодировки

Несъмнено предимство на традиционните кодови таблици е изключителната краткост на представянето на текстова информация. Тази краткост обаче води и до няколко недостатъка, органично свързани с нея:

  • Тъй като символите на различните езици са представени от едни и същи стойности от 0 до 255, тогава за правилната им визуализация изпълняващата система трябва да знае не само кода на символа, но и името на кодовата таблица. В същото време, въпреки всички усилия на стандартизаторите, несъответствието в името на кодировките е пълно (например ASCII може да се нарече ANSI_X3.4-1968, ANSI_X3.4-1986, cp367, csASCII, IBM367, iso- ir-6, ISO646-US, ISO_646. irv: 1991, ascii, us, us-ascii, us-ascii-1968, x-ansi; за синоними на други кодировки вижте WDH: Стандартни кодировки на символи).
  • По същата причина е почти невъзможно да се комбинират няколко кодови таблици в един документ. Това води до "типографска бедност" на текстовите документи, тъй като огромен брой полезни знаци извън даденото национално кодиране се изхвърлят зад борда.
  • Кодовите таблици, фокусирани върху азбучни системи за писане, не могат да решат проблема с кодирането на далекоизточните йероглифи и индийските сричкови азбуки. Между другото, това означава, че почти половината от населението на света е лишено от възможността да работи с компютър на родния си език.

Тъй като компютрите стават по-мощни, интернет ? разклонени и операционни системи ? по-приятелски към потребителя, тези недостатъци се оказаха все по-сериозна пречка за създаването на естествени интерфейси човек-компютър и компютърна мрежа. Изход от ситуацията беше постигнат чрез създаването на стандарта Unicode, който ще бъде обсъден на следващата страница.