Transfer interrupted!
преобразования
символ<-->код, то речь идет о CCS : coded character set. Именно этому набору : coded character set
и присваивается имя : KOI8-R,
ISO_8859-1, ASCII. Иногда термин CCS
сокращают до сharset.
Так например в стандарте MIME
употребляется термин сharset, хотя подразумевается конечно же CCS:
Content-Type: text/plain; charset=koi8-r
Content-Type: text/plain; charset=Windows-1251
Content-Type: text/plain; charset=ibm-866
Как определяется character repertoire
для определенного charset ?
Чаще всего набор символов определяется из языка (lang) и соответствующей ему системы письменности (script). Иногда рассматривается набор символов, воспризводимый конкретной аппаратурой ( например DEC VT-100 Character Set).
Иногда конкретный набор символов является подмножеством другого, более обширного набора символов или же комбинацией
нескольких наборов (или их частей). Например, широко распространенный набор символов для представления русского языка : KOI8-R, содержит в себе символы из наборов LATIN, CYRILLIC, BOX DRAWING, BLOCK ELEMENT и т.д.. А конкурирующий с ним charset
- содержит больше символов из набора CYRILLIC (русские, украинские, белорусские), но меньше - из BOX и BLOCK. Кроме того в KOI8-R
нет например символа EURO.
Старшая половина charset (CCS) и code points символов.
Младшая половина совпадает с US-ASCII.
(см. также описние в формате POSIX.)
Существует минимальный
(переносимый) (POSIX) - набор символов, который должны поддерживать любые информационные системы (определен в стандарте ISO 646) (он же ). С другой стороны, существует также "универсальный" Universal Character Set (UCS, ) включающий в себя все
возможные символы человеческих языков, технические, картографические и т.д. символы (~40.000 символов) (ISO 10646). Также, для примера, можно упомянуть один из довольно широко распространенных наборов символов : (Czyborra ).
Каждый charset имеет определенное .
Теперь насчет кодирования. Каким образом выбирается CES ?
Выполнить "кодирование" (encoding) довольно легко как для латинских так и для всех (?) индоевропейских языков (фонетическое письмо). Действительно, закодировать 26 латинских (ASCII) или 33 буквы не составляет труда (даже в варианте заглавных и прописных, плюс цифры, плюс знаки препинания). Количество символов (character repertoire) мало, соответственно не велико и code space и получается меньше 256 сode points, что позволяет уместить их в один байт (2^8=256
различных кодовых позиций).
Для языков, чья письменность построена по идеографическому (иероглифическому) принципу, ситуация несколько сложнее. Например в современном 1850
"официальных" иероглифов, тогда как в китайском их число доходит до 5000. Одного байта мало. Необходимы обширные CCS, например EUC-JP или UNICODE. Для поддержки таких языков в POSIX введены механизмы Multibyte и Wide Class chars.
В настоящее время в подавляющем большинстве charset-ов применяется 8-ми битное (байтовое) кодирование. Все настолько к этому привыкли, что charset-ы c большим количеством символов (>256) иногда называют large charset.
Проблемы могут возникнуть лишь при необходимости создания многоязычных
текстов, например русско-японско-английских, или содержащих русский и иврит, e.t.c. В этом случае - практически единственное решение : .
Также проблемы возникают в том случае, если заранее неизвестна
кодировка текста (потеряна CES), так как в UNIX, да и в других OS не имеет никаких дополнительных атрибутов. Это также актуально для HTTP, в том случае, если кодировка (CES) файла .HTML неизвестна. Это довольно неудобно, поскольку часто единственный способ - это подбор подходящей кодировки... Вывод : указывать кодировку необходимо.