ISO 646-IRV
ISO 646-IRV — это международный стандарт, определяющий базовый набор символов для обмена информацией, который лёг в основу множества национальных и отраслевых кодировок, включая ASCII. Официальное название стандарта — «7-битный кодированный набор символов для обмена информацией» (7-bit coded character set for information interchange). IRV (International Reference Version) — международная эталонная версия этого набора, которая служит отправной точкой для создания национальных вариантов.
История и происхождение
Разработка стандарта ISO 646 началась в конце 1960-х годов в рамках Международной организации по стандартизации (ISO). Целью было создание универсального 7-битного кода, который позволил бы различным компьютерным системам и телекоммуникационным устройствам обмениваться текстовой информацией без потерь. До этого существовало множество несовместимых кодировок, что затрудняло взаимодействие.
Первая версия стандарта была опубликована в 1972 году. В основе ISO 646 лежал американский стандарт ASCII (American Standard Code for Information Interchange), разработанный Американским национальным институтом стандартов (ANSI) в 1963 году. ASCII, в свою очередь, базировался на кодах телеграфа и телетайпа.
ISO 646-IRV (International Reference Version) был задуман как эталонный набор символов, который все страны могли бы использовать как основу для своих национальных кодировок. В IRV были включены все символы, необходимые для английского языка, а также некоторые управляющие символы. Однако, поскольку 7-битное кодирование позволяет закодировать только 128 символов (2^7 = 128), в стандарте не было места для букв с диакритическими знаками, используемых в других языках (например, немецком, французском, испанском).
Структура и кодировка
ISO 646-IRV использует 7-битное кодирование. Каждый символ представлен одним байтом, в котором старший (8-й) бит всегда равен нулю. Это позволяет закодировать 128 символов, которые делятся на две основные группы:
Управляющие символы (0–31 и 127)
Первые 32 кода (0–31) и код 127 (DEL) отведены под управляющие символы. Они не отображаются на экране или бумаге, а управляют работой устройства: перевод строки (LF), возврат каретки (CR), табуляция (HT), звонок (BEL) и другие. Эти символы были унаследованы из телеграфных систем и стандарта ASCII.
Графические символы (32–126)
Коды с 32 по 126 отведены под отображаемые символы. Код 32 — пробел (SP). Коды 33–126 включают:
- Цифры (0–9): коды 48–57.
- Прописные латинские буквы (A–Z): коды 65–90.
- Строчные латинские буквы (a–z): коды 97–122.
- Знаки препинания и специальные символы: !, «, #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \, ], ^, _, `, {, |, }, ~.
Национальные варианты и проблема символов
Основная особенность ISO 646 заключается в том, что он не является фиксированным набором символов, а представляет собой «рамочный» стандарт. Он определяет, какие символы должны быть обязательно (например, латинские буквы, цифры), а какие могут быть заменены на национальные символы (буквы с диакритикой, национальные валюты и т.д.).
Для этого в стандарте были выделены 10 «свободных» позиций (коды 35, 36, 64, 91, 92, 93, 94, 96, 123, 124, 125, 126 — точное количество варьируется в зависимости от версии). В IRV эти позиции заняты символами, которые редко встречаются в других языках (например, #, $, @, [, \, ], ^, _, `, {, |, }, ~). Национальные стандарты могли заменять эти символы на свои.
Например:
- Великобритания (BS 4730): Символ # (решетка) заменён на £ (фунт стерлингов).
- Германия (DIN 66003): Символы [ и ] заменены на Ä и Ö, а { и } на ä и ö.
- Франция (NF Z 62-010): Символы @ и [ заменены на à и °, а { на é.
- Швеция/Финляндия (SEN 850200): Символы @ и [ заменены на É и Ä, а { на ä.
- Япония (JIS X 0201): Символ \ заменён на ¥ (иена), а ~ на ‾ (верхнее подчёркивание).
Эта гибкость позволяла использовать стандарт в разных странах, но создавала серьёзные проблемы с совместимостью. Текст, закодированный в немецком варианте, мог быть неправильно прочитан во французской системе, и наоборот. Для решения этой проблемы вводились специальные escape-последовательности (например, по стандарту ISO 2022), которые позволяли переключаться между разными наборами символов.
Отличие от ASCII
Хотя ISO 646-IRV и ASCII очень похожи, они не идентичны. Основное отличие заключается в том, что ASCII является строго фиксированным стандартом, а ISO 646 — рамочным. В ASCII нет «свободных» позиций для замены символов. Однако на практике, когда говорят об «ASCII», часто подразумевают именно ISO 646-IRV, поскольку в большинстве реализаций (особенно в англоязычном мире) они совпадают.
В более поздних версиях ISO 646 (например, ISO 646:1991) IRV был сделан обязательным для всех национальных вариантов, что фактически привело к тому, что ASCII стал международным эталоном, а национальные варианты — лишь его модификациями.
Значение и наследие
ISO 646-IRV сыграл ключевую роль в стандартизации обмена текстовой информацией. Он стал основой для:
- ASCII: Американский стандарт, который фактически стал синонимом ISO 646-IRV.
- UNICODE: Юникод, разработанный в 1990-х годах, решил проблему несовместимости национальных кодировок, используя 16-битное (а позже и 32-битное) кодирование, которое может вместить все символы всех языков мира. Однако первые 128 символов Юникода (U+0000–U+007F) полностью совпадают с ISO 646-IRV.
- Множество национальных кодировок: КОИ-8 (русская), JIS X 0201 (японская), ISO 8859-1 (Latin-1) и другие — все они в той или иной степени являются расширениями или модификациями ISO 646.
Хотя 7-битные кодировки сегодня практически не используются в чистом виде (за исключением некоторых специализированных систем), их наследие живёт в Юникоде и в структуре современных компьютерных систем. ISO 646-IRV стал первым шагом к глобальной стандартизации текстового обмена.
Интересные факты
- Символ «@» (коммерческое at) в ISO 646-IRV имеет код 64. Его происхождение связано с бухгалтерскими и торговыми документами, где он обозначал «по цене» (например, «10 единиц @ 5 долларов»).
- Символ «#» (решетка, октоторп) в ISO 646-IRV имеет код 35. В англоязычном мире он часто используется как знак номера (№).
- Символ «~» (тильда) в ISO 646-IRV имеет код 126. В некоторых национальных вариантах (например, в японском) он заменялся на символ «‾» (верхнее подчёркивание), что приводило к путанице.
- Стандарт ISO 646 был одним из первых, кто ввёл понятие «escape-последовательности» (ESC) для переключения между наборами символов, что позже было развито в стандарте ISO 2022.
Источники
- ISO 646:1991, Information technology — ISO 7-bit coded character set for information interchange.
- Mackenzie, C. E. (1980). Coded Character Sets: History and Development. Addison-Wesley.
- Уильямс, С. (1997). История вычислительной техники. Издательство «Мир».
- Стандарт ASCII (ANSI X3.4-1968).
- Документация по стандарту ISO 2022 (Information technology — Character code structure and extension techniques).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →