Кодировки

Существующее в данный момент количество кодировок и связанных с ними понятий может поставить в тупик практически любого новичка.

В сети много информации по теме, однако далеко не всегда корректной и непротиворечивой, т.к. многие "господа эксперты" путаются в этих понятиях.

Я решил не трогать вопрос о том, почему и нафига столько разных кодировок.
Вместо этого я попытался собрать в одном месте и оформить в виде словарика тот минимум понятий, который позволит не путаться что такое кодировка, чем она отличается от charset'а, а чем от unicode.

Возможно позже более подробно остановимся на кодировках юникода и рассмотрим как именно происходит представление текста, а пока начнем с главного.

Code point
Любое цисло (код), которое однозначно (в рамках кодировки) идентифицирует некий символ. Тут важно понимать что code point'ы — это не обязательно байты, которые окажутся в памяти ПК при использовании текста

(Coded) charset (space)
Грубо говоря, набор пар "символ + его code point"

(Character) encoding (system) = Кодировка
Система кодирования символов алфавита (или их code point'ов) до некой последовательности (точки-тире азбуки Морзе, электрические импульсы, биты и т.д.)

Code page = Кодовая страница
Таблица, ставящая каждому байту памяти в соответствие некий символ. Частный случай понятия "кодировка". Для русского языка как правило используются след. кодовые страницы: CP1251 (синоним windows-1251), семейство KOI8, CP866 (DOS)

ASCII
Кодовая таблица, изначально семибитная. С добавлением 8го бита, стала восприниматься как половина восьмибитной* и легла в основу многих других, располагая во второй своей половине специфичные национальные символы. Так, cp1251 и KOI8 являются именно расширениями ASCII.

Unicode
Стандарт, который позволяет кодировать символы практически всех языков мира. Он определяет частный случай charset'а, так называемый универсальный набор символов (UCS, universal character set), который состоит из пар code point + символ.

Например для букв В и Щ соответственно:

  • 0x0412 #CYRILLIC CAPITAL LETTER VE
  • 0x0429 #CYRILLIC CAPITAL LETTER SHCHA

Представление его code point'ов в памяти определяется одной из кодировок UTF (Unicode Transfotmation Format):

  • UTF-8 — самая распостраненная форма представления (кодировка) юникода. Благодаря отличной совместимости в ASCII получила наиболее широкое распостранение
  • UTF-16 (UTF-16BE, UTF-16LE) — кодирование в виде последовательности 16-битных слов
  • UTF-32 (UTF-32BE, UTF-32LE) — кодировка юникода, использующая для представления символов их 32хбитные code point'ы
  • UTF-7 — создана для семибитных каналов, но не включена в стандарт
  • UTF-9 и UTF-18 — кодировки, которые были предложены в качестве первоапрельской шутки
  • UCS-2 - устаревшая двухбайтовая кодировка, которую заменили на UTF-16 в версии юникода 2.0. Все символы до 0x10000 у них совпадают, а старшие на самом деле довольно редко используются.



* — Т.к. в ASCII каждый символ закодирован последовательностью из 8 бит (т.е. одним байтом), а максимальное количество значений, которое могут принимать 8 бит (1 байт) - 256, то значит таблица может содержать до 256 символов некоторого языка и управляющих символов.

Комментарии

Добавить комментарий

Адрес показан не будет
CAPTCHA
Антибот
Как оформить комментарий?