|
|
||
Прочитал статью: "Чего не было в кодировках и до чего до сих пор так и не додумались" Газета "Компьютерные вести", kv.by/index2010133801.htm Издание 3-е, исправленное и дополненное. Дмитрий Тюрин, DmitryTurin.narod.ru и накатила ностальгия... Чего только не выдумывали мы на дежурствах, глядя (таращась) на дисплеи. |
Вся наша жизнь - игра (субъектов с объектами)...
Дятел - это не только птичка, но и ....
Рассмотрим хорошо знакомый всем связистам телеграфный аппарат СТА-2, СТА-67 года издания (ленточный) и телетайп Т-100. Всего 10-20 лет назад распространённый способ документированной связи.
Материал из Википедии - свободной энциклопедии
Десятич- |
Двоичный |
Лат. |
Рус. |
Циф. |
---|---|---|---|---|
24 |
11000 |
A |
А |
- |
19 |
10011 |
B |
Б |
? |
14 |
01110 |
C |
Ц |
: |
18 |
10010 |
D |
Д |
Кто там? |
16 |
10000 |
E |
Е |
З |
22 |
10110 |
F |
Ф |
Э |
11 |
01011 |
G |
Г |
Ш |
5 |
00101 |
H |
Х |
Щ |
12 |
01100 |
I |
И |
8 |
26 |
11010 |
J |
Й |
Ю |
30 |
11110 |
K |
К |
( |
9 |
01001 |
L |
Л |
) |
7 |
00111 |
M |
М |
. |
6 |
00110 |
N |
Н |
, |
3 |
00011 |
O |
О |
9 |
13 |
01101 |
P |
П |
0 |
29 |
11101 |
Q |
Я |
1 |
10 |
01010 |
R |
Р |
4 |
20 |
10100 |
S |
С |
' |
1 |
00001 |
T |
Т |
5 |
28 |
11100 |
U |
У |
7 |
15 |
01111 |
V |
Ж |
= |
25 |
11001 |
W |
В |
2 |
23 |
10111 |
X |
Ь |
/ |
21 |
10101 |
Y |
Ы |
6 |
17 |
10001 |
Z |
З |
+ |
2 |
00010 |
Возврат каретки |
||
8 |
01000 |
Перевод строки |
||
31 |
11111 |
Буквы латинские |
||
27 |
11011 |
Цифры |
||
4 |
00100 |
Пробел |
||
0 |
00000 |
Буквы русские |
МТК-2 основан на международном телеграфном коде ? 2 (ITA2), рекомендованном Международным консультативным комитетом по телефонии и телеграфии в 1932 году (в международном коде 00000 не используется).
Соответствие между английским и русским регистрами, принятое в МТК-2, было использовано при создании компьютерных кодировок КОИ-7 и КОИ-8.
Использование 5-и битного кода наложило ряд ограничений по объёму передаваемой информации - 32 возможных кода при наличии алфавита с большим количеством символов, большое количество знаков препинания, специальных(денежных единиц и т. п.). Для решения применили Управляющие коды:
31 Буквы латинские,
27 Цифры,
0 Буквы русские,
4 Пробел
2 Возврат каретки,
8 Перевод строки,
Первые три кода - это переключатели (регистров) таблиц отображения символов разных алфавитов, три других -действуют для всех наборов символов как форматирование печатного текста на рулоне(листе) бумаги.
Всё. Это все управляющие коды для 32 битовой кодовой последовательности. В результате (32-6=26) * 3 = 78 знаков - печатаемых(отображаемых) символов для 2х алфавитов и 1 набора знаков. Причём часть русских букв поместили в таблицу знаков - не помещались в русской. А часть символов дублируется для уменьшения переключений таблиц (АЕКОТ).
Сравните с набором управляющих кодов электронных терминалов ЭВМ (полностью в приложениях в конце текста).
В КОИ-7 коды от 000 до 037 являются управляющими. VT50 отрабатывает шесть из
них:
Octal Action
007 звонок
010 курсор влево
011 горизонтальная табуляция. Позиционирует курсор на
следующую кратную 8 позицию, если она не более, чем 72-я. Далее -
на каждую последующую.
012 перевод строки. Опускает курсор на
одну строку.
015 возврат каретки. Курсор до упора
влево.
033 переводит терминал в ESCape-моду. Если он уже в
ESC-моде, то переводит обратно в нормальную моду
(режим).
После перехода в ESC-моду следующий принятый код рассматривается как
команда.
А вот работа клавиш терминала - не кодов. Это просто управление и редактирование текста, т. е. форматирование вывода для облегчения восприятия субъектом.
Клавиша "BREAK" подвешивает линию в "0"
пока нажата. Введена для совместимости с программным обеспечением,
написанным под полудуплекс.
Клавиша "REPEAT"
разрешает авто-повтор нажатого символа.
Клавиши "SHIFT"
изменяют текущий верхний/нижний регистр на
противоположный, пока
нажаты.
Клавиша "CAPS LOCK" фиксирует верхний регистр
независимо от нажатия клавиш переключения регистров, но только для
букв.
Клавиша "CONTROL" обнуляет два старших бита
каждой нажимаемой (при нажатой "CONTROL") клавиши и
вызывает передачу в линию кодов 000-037 (управляющих).
Клавиша SCROLL имеет смысл только в моде задержанного вывода. Разрешает скроллинг (прокрутку) одной строки либо всего экрана. В случае заполнения доступной части экрана, потребности вывести еще строку и задержанном выводе дисплей выдаст код XOFF (023) для торможения программы вывода. Для продолжения обмена посылается код XON (021).
Сравните с Кодировкой символов
ASCII:
-------------------------
Img |
SYM |
NAME |
HEX |
OCT |
DEC |
|
|
|
|
NIL |
00 |
000 |
0 |
Нуль-не используется |
|
|
^A |
SON |
01 |
001 |
1 |
Начало заголовка |
|
|
^B |
STX |
02 |
002 |
2 |
Начало текста |
|
|
^C |
ETX |
03 |
003 |
3 |
Конец текста |
|
|
^D |
EOT |
04 |
004 |
4 |
Конец передачи |
|
|
^E |
ENQ |
05 |
005 |
5 |
Запрос |
|
|
^F |
ACK |
06 |
006 |
6 |
Квитирование |
|
|
^G |
BEL |
07 |
007 |
7 |
Звонок |
|
|
^H |
BS |
08 |
010 |
8 |
Возврат на одну позицию |
|
|
^I |
HT |
09 |
011 |
9 |
Горизонтальная табуляция |
|
|
^J |
LF |
0A |
012 |
10 |
Перевод строки |
|
|
^K |
VT |
0B |
013 |
11 |
Вертикальная табуляция |
|
|
^L |
FF |
0C |
014 |
12 |
Подачи формы |
|
|
^M |
CR |
0D |
015 |
13 |
Возврат каретки |
|
|
^N |
SO |
0E |
016 |
14 |
Сдвиг с исключением |
|
|
^O |
SI |
0F |
017 |
15 |
Сдвиг с включением |
|
|
^P |
DLE |
10 |
020 |
16 |
Escape знак для канала передачи |
|
|
^Q |
DC1 |
11 |
021 |
17 |
Управление устройством 1 |
|
|
^R |
DC2 |
12 |
022 |
18 |
Управление устройством 2 |
|
|
^S |
DC3 |
13 |
023 |
19 |
Управление устройством 3 |
|
|
^T |
DC4 |
14 |
024 |
20 |
Управление устройством 4 |
|
|
^U |
NAK |
15 |
025 |
21 |
Отрицательное квитирование |
|
|
^V |
SYN |
16 |
026 |
22 |
Синхронизирующее ожидание |
|
|
^W |
ETB |
17 |
027 |
23 |
Конец передаваемого блока |
|
|
^X |
CAN |
18 |
030 |
24 |
Отменить |
|
|
^Y |
EM |
19 |
031 |
25 |
Конец носителя |
|
|
^Z |
SUB |
1A |
032 |
26 |
Заменить |
|
|
^[ |
ESC |
1B |
033 |
27 |
Escape - код-переключатель |
|
|
^\ |
FS |
1С |
034 |
28 |
Разделитель файлов |
|
|
^] |
GS |
1D |
035 |
29 |
Разделитель групп |
|
|
^^ |
RS |
1E |
036 |
30 |
Разделитель записей |
|
|
^_ |
US |
1F` |
037 |
31 |
Разделитель элементов |
|
|
|
BLANK |
20 |
040 |
32 |
Пробел |
|
Чётко видно, что перетащены кодировки из терминалов для управления работой самого терминала(ПК) и управления удалённым устройством и дополнительно для форматирования вывода на экран печатаемых символов.
Документ без заголовка и подписи - как человек без головы...
Сравните заголовки 2-х наиболее распространённых форматов текстовых документов в наше время.
"http://www.w3.org/TR/html4/strict.dtd">
XML
encoding="UTF-8"?>Что общего с телеграфным способом управления кодовой таблицей?
В глаза кидается два момента:
по-умолчанию всегда используется одна и та же кодовая таблица
явно указывается таблица кодировка вывода символов - код-переключатель в тексте документа (для телеграфа РУС-ЛАТ-ЦИФРЫ).
Выделим ОДИН код для указания(управления) таблицами кодов вывода печатаемых символов на экран(лист). Обозначим его 2-мя буквами CP(Code Page, иногда Char set). Для номера таблиц выделим 2 байта = 1 слову = 16 битам, всего до 65К таблиц по (256 - N) символов для одно-байтной кодировки, всего получим почти 16 миллионов символов.
Тогда любой текст будет начинаться с кода CP и номера таблицы вывода (отображаемых) символов. Номера таблиц 0000 и FFFF - запретим. Комбинация BOM для Unicode не нужна.
На экране будет выглядеть так:
Это основная ТАБЛИЦА
В файле текста увидим (в кодовом режиме):
CP 00 01 Sh э т о о с н о в н а я CL т а б л и ц а End
Тот же результат можно получить таким образом:
CP 00 01 Sh э т о о с н о в н а я Sh т Sh а Sh б Sh л Sh и Sh ц Sh а
Sh ( SHIFT) - это код-модификатор текста(символа) указывает, что следующий символ должен отображаться как БОЛЬШОЙ/заглавный, т. е. из той половины таблицы изображений символов, где те же символы отображаются на выводе БОЛЬШИМИ(заглавными). Фактически для вывода символов требуется минимум 2(две) таблицы - с изображениями маленьких(строчных) и БОЛЬШИХ(заглавных-прописных) символов. Sh - это код-переключатель таблиц отображения для одного символа из одной кодовой таблицы.
коды |
00 |
|
|
1F |
|
|
|
|
|
|
FE |
малые |
|
|
|
|
а |
б |
|
|
|
ю |
я |
БОЛЬШИЕ |
|
|
|
|
А |
Б |
|
|
|
Ю |
Я |
CL - это код-модификатор указывает, что последующие символы должны отображаться как БОЛЬШОЙ/заглавный до появления следующего кода CL(Caps Lock -можно UC -Upper Case), который переключит на вывод из таблицы изображений малых символов. Дмитрий Тюрин, DmitryTurin.narod.ru предлагает ограничить действие пробелом - печатаемым символом практически во всех страницах. Я предлагаю ограничить эту область отдельным кодом LC(Lower Case) или End (кодом-признаком окончания блока) для однозначности форматирования текста, ведь БОЛЬШИЕ символы м.б. во всей строке, пробелы внутри строки и ограничение символами разделителями типа (.) точка. Это блок выделения текста и признак конца любого блока форматирования.
CP 00 01 Sh э т о о с н о в н а я CL т а б л и ц а LС
CP 00 01 Sh э т о о с н о в н а я CL т а б л и ц а End
Любой символ из другой таблицы потребует на себя 4 байта, но уже строка резко уменьшит расходы. Смесь одиночных символов даёт самый большой расход - по 4 байта на символ, т. е. 4 раза объём увеличится. Для 2-язычных текстов, математических, химических и т. п. увеличение объёма не больше 15-20%.
Псевдографика для рисования таблиц, заполнение знакоместа тенью разной степенью насыщенности, дополнительные знаки денежных единиц и математики и т. п. сами просятся в таблицу кодировки 002, как наиболее востребованные.
К обязательным управляющим кодам должен относится отдельный код переключения на 2-байтную таблицу символов и обратно. Это для тех наборов символов, количество которых больше возможных в (256-N) страницах кодировки, прежде всего иероглифы. Но можно для номеров таблиц начиная с NNN определить свои правила отображения и управляющие коды, т. е. со страницы 32500 на-пример коды будут 2-х байтными и знакоместо иметь размеры Ширина*Высота другие. Отсюда псевдо-графика (таблицы, заполнение, тень) тоже свои.
Если внимательно прочитать спецификацию Юникод, то обнаружим 17 таблиц 2-х байтовых кодов символов, которые называются плоскостями (планами), где нулевой - основной. Вот цитата:
"Кодовое пространство разбито на 17 плоскостей по 216 (65536) символов. Нулевая плоскость называется базовой, в ней расположены символы наиболее употребительных письменностей. Первая плоскость используется, в основном, для исторических письменностей, вторая - для редко используемых иероглифов ККЯ, третья зарезервирована для архаичных китайских иероглифов[12]. Плоскости 15 и 16 выделены для частного употребления.[7]"
В принципе достаточно 1-го байта для номера кодовой таблицы. Начиная с N=220 на-пример, коды будут 2-х байтными и иметь свои правила отображения вывода. Это целых 35 таблиц с 2-х байтными символами, куда спокойно входят 17 таблиц уже существующих Unicode. Но моё личное мнение - 2 байта = 65K таблиц на будущее (не надо жадничать!!! Таблиц явно больше 255.)
Всё возвращается на круги своя...
Я согласен с Дмитрием о РАСЦВЕТКЕ и модификации текста, типа верхних и нижних индексов, даже при работе с консолью. Многолетняя практика создания терминалов и терминальных программ подтвердила необходимость цветного выделения блока текста для улучшения восприятия. Смотрите приложение по терминалам в конце статьи.
Исторически (технически) сложилось так, что под выводом на консоль или терминал подразумевают вывод символов моноширинных, т. е. ширина и высота знакоместа для символа постоянны. Чип CRTC Motorolav6845, графический сопроцессор 8514А не знакомы нынешним програмерам, но прекрасно известны программистам ДОС (VMS) со всеми их ограничениями в выводе изображения. Сложился ряд стандартов текстового и графического вывода. Знакоместо 8х8, 8х14, 8х16 (фактически или аппаратно 9х16) пикселей. Стандарт 24 рядов на 80 знакомест = 1920 символов. Знакоместо (8х8) 10х8 пикселей даёт 240 строк развёртки на 640 точек по горизонтали. Или 25х80 = 2000 символов при разрешении экрана 250 строк на 640 точек.
Расстояние между строками старались заложить сразу в высоту символьного знакоместа.
Атрибут размер шрифта подразумевает, что аппаратно (жёстко) изменится размер знакоместа, т. е. фактически это уже (псевдо) графический режим терминала. Если учитывать ширину символов для вывода, то надо иметь таблицу размеров (хотя бы ширины) для каждого выводимого символа. Если учитывать высоту выводимого символа, то высота строки должна быть не меньше высоты самого большого символа. Для математических символов типа Интеграл надо учитывать ВСЕ следующие за ним коды-символы для построения ГРАФИческого изображения.
Цвет символа (знакоместа) зависит от аппаратной реализации терминала (видеокарты) и в частном решении это байт-код символа и байт-атрибут цвета текста и фона экрана в месте вывода этого символа. Использование 3-х или 4-х байтного представления цвета в терминалах не имеет большого смысла, достаточно (как ранее) 1-байтного кода(атрибута), что даёт МИГАЮЩИЙ, Инверсный, Яркий и 32 цветную палитру для вывода символов. МИГАЮЩИЙ раньше применялся в монохромных режимах, сейчас смысла использовать его нет.
Но с учётом цвета вывода символа и фона экрана количество цветов уменьшится до 16 из одного набора(палитры). Практика Веб-сайтов показывает, что многоцветье не требуется.
Это м.б. блок с заголовком или "фракция" по терминологии Дмитрия. В любом случае наклонное и жирное начертание символов потребует две по две = 4(четыре) дополнительные таблицы отображения символов. А учитывая верхний и нижний индекс - ещё две как минимум.
коды |
|
00 |
|
1F |
|
|
|
|
|
|
FE |
|
Управл. |
|
|
|
|
|
|
|
|||
малые |
1 |
|
|
|
а |
б |
|
|
|
ю |
я |
БОЛЬШИЕ |
2 |
|
|
|
А |
Б |
|
|
|
Ю |
Я |
Малые жирные |
3 |
|
|
|
а |
б |
|
|
|
ю |
я |
БОЛЬШИЕ жирные |
4 |
|
|
|
А |
Б |
|
|
|
Ю |
Я |
Малые наклон |
5 |
|
|
|
а |
б |
|
|
|
ю |
я |
БОЛЬШИЕ наклон |
6 |
|
|
|
А |
Б |
|
|
|
Ю |
Я |
Малые наклон жирные |
7 |
|
|
|
а |
б |
|
|
|
ю |
я |
БОЛЬШИЕ наклон жирные |
8 |
|
|
|
А |
Б |
|
|
|
Ю |
Я |
Малые верхний индекс |
9 |
|
|
|
а |
б |
|
|
|
ю |
я |
Малые нижний индекс |
10 |
|
|
|
а |
б |
|
|
|
ю |
я |
Вопрос - а нужны ли БОЛЬШИЕ верхние и нижние индексы? А тем более наклонные индексы ?
Итого уже 10 таблиц начертаний символов для вывода на экран(лист). 16 байт на символ по 256 знаков и 10 таблиц равно 40 КБ памяти. Пока не много и терпимо.
Подчёркнутый, надчёркнутый, зачёркнутый м.б. реализовано по-разному - графически наложением поверх символа, т.е. модификация существующего символа при выводе отображения. По-моему это предпочтительнее. Но требует постоянных дополнительных кодов для этих модификаторов. Зато позволяет управлять одиночными символами. (ИМХО По моему личному мнению - не нужно). Но вот полную строку в верхнем или нижнем индексе, наподобие Caps Lock (БОЛЬШИЕ) не выведешь без удвоения размера, а тем более нельзя вывести друг над другом 2 строки в верхнем и нижнем индексе или вложенные субиндексы, на-пример:
ААА |
Верхний индекс kj |
Нижний индекс f n |
Это одно ограничение терминального вывода (моноширинных символов). Сложные формулы тем более требуют оформление графической картинки вывода. Здесь требуется свой стандарт текстовой записи выражений и их интерпретации при выводе на экран. Примерно так, как сделано в LibreOficce. Тут можно использовать блок Esc-команд. Но вот вопрос - нужно ли усложнять терминал для обработки сложных математических (химических и т. п.) формул? Возможно этот модуль обработки (математических выражений в картинку) потребуется менее 0.1% случаев. Вложенность скобок для много-этажных формул могут вызвать переполнение экрана, поэтому какой-то предел должен быть. Практика поможет ответить на эти вопросы (хотя и с руганью э... споритьмами).
"Фракция" или блок с заголовком более универсальное решение, т. к. одиночный символ расцвечивается реже, чем слово(литерал). Практически это подвид ESC-моде для терминалов, раньше драйвер ANSI широко применялся в ДОС системах. Возможен модуль обработки в графический рисунок, который будет вставлен в разрыв текста на экране вывода.
Рассмотрим "фракцию" Дмитрия (фактически блок форматирования)
Начало ф р а к ц и и |
Байт-предсказатель условий атрибутов |
Цвет 3 или 4 байта или 1 байт для 256 цвет 16 +16 фона |
Размер букв знаков |
метка |
Середина фракции - по факту конец заголовка блока |
Текст
символы |
Конец ф р а к ц и и
|
Atr |
фракционная запись -заголовок блока |
|
|
End |
Байт-предсказатель - есть всегда (скоко атрибутов за ним читать)
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
| |
| |
| |
| |
| |
| |
| |
| |
- есть цвет (т.е доп. байты цвета фона и символа) |
| |
| |
| |
| |
| |
| |
| |
- |
- есть размер шрифта (ещё доп.байты= ширина*высота) |
| |
| |
| |
| |
| |
| |
- |
- |
- есть идентификатор-метка-якорь(ещё доп. байты) |
| |
| |
| |
| |
| |
- |
- |
- |
- 0 всегда???? |
| |
| |
| |
| |
- |
- |
- |
- |
- жирные |
| |
| |
| |
- |
- |
- |
- |
- |
- наклонные |
| |
| |
- |
- |
- |
- |
- |
- |
- подчёркнутые |
| |
- |
- |
- |
- |
- |
- |
- |
- есть тень (фактура фона) |
Код атрибута + код модификатора(без размера шрифта) дают дополнительно 2-6 байта перед символом.
Технические трудности изменения размеров символов на лету, большой набор символов разных размеров, требование картинки в тексте привели к требованию ГРАФического вывода как наиболее универсального. На-пример, реализация в программе ChiWriter под ДОС, когда ВСЕ символы выводились в графическом режиме и как раз в режиме переключения кодовых страниц символов(собственных).
Управление форматированием текста широко применялось в редакторе MultiEdit, известного в СССР в варианте "Фотон", он же МЕ-2.
Смотрите также Д.Кнут - формат TeX.
Фактически это предложение Тюрина - один из вариантов языка SGML, подобие HTML, но только для терминального режима, т. е. ограниченного техническими возможностями конкретного терминала. Позволяет терминальное устройство цвет - выводит, нет - игнорирует (или заменяет...) и тому подобное. Главным принципом терминальных устройств является максимум возможностей при минимальных затратах.
Кто чем(кем) управляет - ещё разобраться надо...
Распространённые коды управления выводом на экран (лист бумаги), а фактически курсором-указателем позиции вывода следующего символа в потоке текста.
BS - возврат на одну позицию ( обычно очистка символа ДО - функция драйвера клавиатуры (редактора), а не кода, - но позволяет хитрости в тексте, типа вывести 2 символа на одном знакоместе, в том числе верхний и нижний индексы на одном знакоместе-позиции). Фактически управляет курсором-указателем позиции вывода следующего символа. Смотрите в статье в приложениях, как предлагает его использовать Дмитрий. Фактически в тексте в наше время не применяется.
CR- возврат каретки (в начало той же строки - фактически начало новой строки) - позволит печатать поверх уже напечатанных символов новые, по всей строке до конца, обозначенного кодом LF-Новая строка. Фактически управляет курсором-указателем позиции вывода следующего символа.
LF- Перевод строки (новая строка -часто признак конца строки). Позволяет перейти на новую строку и печатать с той же позиции (ступеньки на экране и листе бумаги). Фактически управляет курсором-указателем позиции вывода следующего символа. На-пример:
Это первая строка. |
|
|
Это вторая строка. |
Это частный случай дублирования кода VP -сдвиг вверх-вниз на число пикселей-строк, но с фиксированной высотой сдвига равной высоте знакоместа (текущего) для таблицы вывода.
Комбинация этих 2-х кодов (CR+LF или LF+CR) в тексте однозначно даёт понять о конце строки и начале новой строки (параграфа, абзаца) вывода текста.
VP- Вертикальный сдвиг (позиция) - следующий байт, как число со знаком - количество пикселей-строк развёртки (126 пикселей вниз и вверх с минусом). Фактически управляет курсором-указателем позиции вывода следующего символа на экране и листе бумаги. На-пример:
|
Это вторая строка. |
|
Это первая строка. |
|
|
|
|
Это третья строка. |
FF -Подача формы (печать на принтере с нового листа-страницы). На экране может по аналогии: очистить экран, переместить (позиционировать) курсор в верхний левый угол на начало. Чаще в тексте как признак начала новой страницы вывода (то, что называют разрыв страницы)- принудительное начало блока текста, которое надо разместить c начала листа-страницы. Также может изображаться горизонтальной линией-разделителем текста на экране.
Но надо учитывать, что это скорее код управления устройством, а не вывода текста, и логичнее его определить в таблице команд терминала через Esc-команду. Можно оставить для совместимости, но код всё равно другой, и при конвертации в другую систему кодировки будут свои правила. Здесь двоякость смысла: управление выводом (форматированием текста) и в то же время код управления устройством.
HT - Горизонтальная табуляция. Стандартно смещение вывода символа на фиксированные по-умолчанию позиции. Обычно для вывода по-табличному (рядами и столбцами) чисел, слов. Набор номеров позиций табуляции в строке вывода по-умолчанию через 8 символов. Поведение зависит от принятых настроек терминала. Часто зависит от таблицы табуляторов - где указаны позиции начала колонок. Фактически управляет курсором-указателем позиции вывода следующего символа на экране и листе бумаги.
HP- Горизонтальный сдвиг (позиция) влево (минус) и вправо на количество пикселей( -126 +127) в следующем байте. В отличие от HT это графический сдвиг курсора.
End - Код конца действия (блока-фракции) кодов команд и модификаторов: ESC, Atr, CL. Желателен, но Необязателен, т. к. выключателем (окончанием) блока может быть тот же код-переключатель.В теле блока тогда этот код д.б. запретным.
ESCape (убегать из текста) - код-переключатель: всё, что за ним -трактуется как команды для устройства (терминала) до появления следующего ESC, End. (Следующие 2 байта - размер блока команд - как вариант более предпочтителен, т. к. позволяет в команде набор любых кодов - даже программ). Это для совместимости со старыми системами терминалов и расширение возможностей новых.
Звонок, вызов оператора, сигналы обмена - фактически таблица кодов команд управления оконечным устройством (терминалом), которые выполняются до появления кода End или повторного ESC. Блок команд в тексте для какого-то устройства (на-пример вывода на принтер) - более логичный.
В принципе также можно интерпретировать код Atr, как блок команд для вывода модифицированного символьного текста.
Мы видим, что часть кодов управления выводом с произвольным сдвигом по пикселям не обязательны, применительно к старому способу вывода в фиксированных позициях экрана. Но для вывода между текстом графической картинки (на-пример: математической формулы, иконки...) они найдут применения. Или эффекты поверх символьного текста.
Под управляющие отводится всего 15 кодов. Если ограничиться фиксированными размерами знакоместа символа, отсечь команды терминала - то останется 10 кодов. Остальной объём кодов под символы алфавита, знаков разделителей и цифр. Нежелательно использовать коды 00, FF, ...
Итого для печатаемых символов остаётся (256-2-15=) 239 кодов.
Новая Кодировка управления выводом символов EvA CP-0001:
/Evropa V(пять)A=Австралия, Азия, Антарктида, Америка, Арктика/
Img |
SYM |
NAME |
HEX |
OCT |
DEC |
|
|
|
|
NIL |
00 |
000 |
0 |
Нуль-не используется (путаница с Zero-строками в языке Си) |
|
|
^A |
CP |
01 |
001 |
1 |
CP(Code Page иногда Char set) |
|
|
^B |
CL |
02 |
002 |
2 |
CL(Caps Lock -можно UC -Upper Case) БОЛЬШОЙ /заглавный до появления следующего кода CL (или LC) |
|
|
^C |
LC
End |
03 |
003 |
3 |
LC(Lower Case) выключение вывода БОЛЬШИХ /заглавных символов (для возможности вывода строк)-режим по-умолчанию Код конца действия - выключатель |
|
|
^D |
Sh |
04 |
004 |
4 |
Sh( SHIFT) - это код указывает, что следующий один символ должен отображаться как БОЛЬШОЙ/заглавный, |
|
|
^E |
Ui |
05 |
005 |
5 |
Верхний индекс (один символ или блок до End ?) |
|
|
^F |
Li |
06 |
006 |
6 |
Нижний индекс (один символ или блок до End ?) |
|
|
^G |
HP |
07 |
007 |
7 |
Горизонтальный сдвиг влево (минус) и вправо на количество пикселей в следующем байте |
|
|
^H |
BS
bs |
08 |
010 |
8 |
Возврат на одну позицию ( обычно очистка символа ДО - функция клавиатуры, а не кода, но позволяет хитрости в тексте, типа вывести 2 символа на одном знакоместе-зачеркнуть, подчеркнуть...) |
|
|
^I |
HT |
09 |
011 |
9 |
Горизонтальная табуляция - по-умолчанию каждая 8 позиция символа |
|
|
^J |
VP |
0A |
012 |
10 |
Вертикальный сдвиг - следующий байт, как число со знаком пикселей-строк развёртки (вниз и вверх с минусом) |
|
|
^K |
FF
Atr |
0B |
013 |
11 |
Подачи формы (печать на принтер) - это команда через Esc логичнее Атрибут вывода, цвет, модификация ...-до появления следующего кода Atr или End |
|
|
^L |
LF |
0C |
014 |
12 |
Перевод строки (новая строка -признак конца строки) |
|
|
^M |
CR |
0D |
015 |
13 |
Возврат каретки (в начало той же строки - фактически начало новой строки) |
|
|
^N |
End
Atr |
0E |
016 |
14 |
Код конца действия - выключатель (блока-фракции) кодов команд и модификаторов: ESC, Atr, CL Атрибут вывода, цвет, модификация ...-до появления следующего кода Atr или End |
|
|
^O |
ESC |
0F |
017 |
15 |
Escape - код-переключатель: всё, что за ним -трактуется как команды из таблицы для устройства (терминала) до появления следующего ESC или End. (Следующие 2 байта - размер блока команд позволит любые коды в блоке, даже End.???) |
|
Всё новое - хорошо забытое старое...
Количество всегда переходит в качество.
Обязательно в наборе должны присутствовать арабские (индийские) цифры, знаки-разделители текста типа пробел, подчеркнуть, пусто обязаны располагаться перед Алфавитом (набором знаков). Исходить из частоты применения знаков в повседневном тексте не обязательно, но желательно.
Таблица кодировки состоит из 3-х основных частей:
- коды управления выводом на экран(лист). Всего 15(или 10). Это обязательная часть;
- коды символов цифр и часто употребляемых знаков, типа разделителей (знаков пунктуации...) - около 60;
- коды собственно нового алфавита (по Дмитрию Тюрину 179);
- коды запрещённые - всего 2 - это х00 и хFF.
Псевдографика для рисования таблиц, заполнение знакоместа тенью разной степенью насыщенности, дополнительные знаки денежных единиц и математики и т. п. сами просятся в таблицу кодировки 0002, как наиболее востребованные, типа Tgm CP-0002.
Часть графических и математических символов будет дублироваться в таблице кодов для (псевдо)графических символов, чтобы уменьшить расходы на переключение кодовых таблиц.
Фактически ранее обязательной была половина таблицы с латинскими буквами и цифрами. Вторая половина отдавалась национальному алфавиту. Предусмотрена была возможность заливать (загружать) её вместо принятой по умолчанию. По-новому обязательными являются коды управления - 15 штук. Пробел, точка, запятая, кавычки, углы и т. п. -основные разделители и цифры, как наиболее часто используемые, желательны, но не обязательны. По-умолчанию всегда будет использоваться кодовая страница CP-0001 EvA(Evropa V(пять)A=Австралия, Азия, Антарктида, Америка, Арктика). Второй по частоте использования будет Таблица псевдоГрафики и Математики - Tgm CP-0002.
Сразу возникает вопрос о верхне-нижних - индексных знаках степени
º |
¹ |
² |
³ |
Так как цифры будут иметь признак верхний - нижний индекс, то отдельно кодировать их нет смысла. Практика покажет.
В таблицу новых кодировок я хотел вставить коды Unicode для изображений символов Д.Тюрина, но не все из них нашёл, поэтому оставил как есть - и так наглядно. Подробности всё равно надо будет дорабатывать при практической реализации и решать ряд вопросов.
Сводная таблица кодов EvA-CP0001 (примерно) шрифт Times Roman
/Evropa V(пять)A=Австралия, Азия, Антарктида, Америка, Арктика/
|
00 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
0A |
0B |
0C |
0D |
0E |
0F |
00 |
Nil |
CP |
CL |
End |
Sh |
Ui |
Li |
BS |
HP |
HT |
VP |
FF |
LF |
CR |
Atr |
Esc |
|
|
☼ |
|
⇥ |
|
⌐ |
? |
|
↔ |
|
↕ |
♀ |
↓ |
|
☻ |
☺ |
01 |
Spc |
. |
, |
: |
; |
! |
? |
| |
^ |
% |
\ |
< |
= |
> |
' |
" |
02 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
/ |
- |
* |
+ |
( |
) |
03 |
& |
# |
~ |
? |
º |
|
¿ |
≈ |
∞ |
% |
` |
" |
≠ |
" |
{ |
} |
04 |
@ |
No |
$ |
£ |
¥ |
₤ |
? |
← |
|
→ |
+ |
≤ |
≡ |
≥ |
[ |
] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
05 |
- |
_ |
a |
á |
à |
â |
ǎ |
ă |
ā |
ã |
ä |
ą |
ą |
å |
æ |
b |
|
- |
¯ |
A |
Á |
À |
 |
Ǎ |
Ă |
Ā |
à |
Ä |
Ą |
Ą |
Å |
Æ |
B |
06 |
c |
ć |
č |
ç |
d |
đ |
ð |
ď |
|
б |
в |
г |
? |
ғ |
f |
ґ |
|
C |
Ć |
Č |
Ç |
D |
Đ |
Ð |
Ď |
Ď |
Б |
В |
Г |
? |
Ғ |
F |
Ґ |
07 |
|
д |
һ |
ħ |
? |
e |
é |
è |
ê |
ĕ |
ē |
ė |
ě |
ë |
ę |
f |
|
|
Д |
Һ |
? |
? |
E |
É |
È |
Ê |
Ĕ |
Ē |
Ė |
Ě |
Ë |
Ę |
F |
08 |
g |
ģ |
ğ |
h |
ж |
җ |
|
з |
|
|
и |
|
й |
|
|
i |
|
G |
Ģ |
Ğ |
H |
Ж |
Җ |
|
З |
|
|
И |
|
Й |
|
|
I |
09 |
į |
í |
ì |
î |
ī |
ϊ |
j |
k |
ķ |
l |
ļ |
ľ |
ł |
m |
n |
ņ |
|
Į |
Í |
Ì |
Î |
Ī |
Ϊ |
J |
K |
Ķ |
L |
Ļ |
Ľ |
Ł |
M |
N |
Ņ |
0A |
ń |
|
ň |
к |
қ |
|
? |
ҝ |
|
л |
? |
м |
н |
ң |
|
? |
|
Ń |
|
Ň |
К |
Қ |
|
? |
Ҝ |
|
Л |
? |
М |
Н |
Ң |
|
? |
0B |
o |
ó |
ò |
ô |
ō |
õ |
ö |
ő |
ø |
œ |
ө |
п |
р |
þ |
q |
r |
|
O |
Ó |
Ò |
Ô |
Ō |
Õ |
Ö |
Ő |
Ø |
Œ |
Ө |
П |
Р |
Þ |
Q |
R |
0C |
ŗ |
ŕ |
ř |
s |
ş |
ś |
š |
β |
t |
ţ |
|
u |
ú |
ù |
û |
ü |
|
Ŗ |
Ŕ |
Ř |
S |
Ş |
Ś |
Š |
ß |
T |
Ţ |
Ť |
U |
Ú |
Ù |
Û |
Ü |
0D |
ű |
ū |
ų |
ů |
v |
w |
|
т |
у |
ÿ |
|
ỹ |
ў |
|
ү |
ұ |
|
Ű |
Ū |
Ų |
Ů |
V |
W |
|
Т |
У |
|
|
Ỹ |
Ў |
|
Ү |
Ұ |
0E |
Ф |
х |
|
|
y |
ý |
ỳ |
ŷ |
ÿ |
z |
ż |
ź |
ž |
ц |
? |
ч |
|
Ф |
Х |
|
|
Y |
|
Ỳ |
Ŷ |
Ÿ |
Z |
Ż |
Ź |
Ž |
Ц |
? |
Ч |
0F |
|
ҹ |
ш |
щ |
ъ |
ы |
|
ь |
э |
є |
ә |
|
ю |
я |
|
|
|
|
Ҹ |
Ш |
Щ |
Ъ |
Ы |
|
Ь |
Э |
Є |
Ә |
|
Ю |
Я |
|
Объединенный Латинско-Кириллический Алфавит по Д.Тюрину
Тюрин Дмитрий, sql50@narod.ru
Псевдографика и математика Tgm CP-0002
|
00 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
0A |
0B |
0C |
0D |
0E |
0F |
00 |
Nil |
CP |
CL |
End |
Sh |
Ui |
Li |
BS |
HP |
HT |
VP |
FF |
LF |
CR |
Atr |
Esc |
|
|
☼ |
|
⇥ |
|
⌐ |
? |
|
↔ |
|
↕ |
♀ |
↓ |
|
☻ |
☺ |
01 |
Spc |
. |
, |
: |
; |
! |
? |
| |
^ |
% |
\ |
< |
= |
> |
' |
" |
02 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
/ |
- |
* |
+ |
( |
) |
03 |
& |
# |
~ |
? |
º |
|
¿ |
≈ |
∞ |
% |
` |
" |
≠ |
" |
{ |
} |
04 |
@ |
No |
$ |
|
↑ |
↓ |
↔ |
← |
|
→ |
+ |
≤ |
≡ |
≥ |
[ |
] |
05 |
- |
_ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
06 |
- |
¯ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
07 |
α |
β |
γ |
δ |
ε |
ζ |
η |
θ |
ι |
κ |
λ |
μ |
ν |
ξ |
ο |
π |
08 |
ρ |
ς |
σ |
τ |
υ |
φ |
χ |
ψ |
ω |
|
|
|
|
|
|
|
09 |
Α |
Β |
Γ |
Δ |
Ε |
Ζ |
Η |
Θ |
Ι |
Κ |
Λ |
Μ |
Ν |
Ξ |
Ο |
Π |
0A |
Ρ |
|
Σ |
Τ |
Υ |
Φ |
Χ |
Ψ |
Ω |
|
|
|
|
|
|
|
0B |
º |
¹ |
² |
³ |
|
|
½ |
¼ |
¾ |
⅓ |
⅔ |
⅛ |
⅜ |
⅝ |
⅞ |
|
0C |
┌ |
┬ |
┐ |
╔ |
╦ |
╗ |
╓ |
╥ |
╖ |
╒ |
╤ |
╕ |
─ |
│ |
▀ |
▐ |
0D |
├ |
┼ |
┤ |
╠ |
╬ |
╣ |
╟ |
╫ |
╢ |
╞ |
╪ |
╡ |
═ |
║ |
▄ |
█ |
0E |
└ |
┴ |
┘ |
╚ |
╩ |
╝ |
╙ |
╨ |
╜ |
╘ |
╧ |
╛ |
░ |
▒ |
▓ |
▌ |
0F |
► |
▲ |
◄ |
▼ |
|
|
|
|
|
|
|
■ |
□ |
▪ |
▫ |
Обращаю внимание - в математике БОЛЬШОЙ знак всегда обозначает не то же самое, что маленький. Понятия курсив (наклонный) практически не нужен для псевдографики рисования таблиц. Дублированные стрелки, распространённые дроби и т. п. требуют вдумчивого размещения. Таким образом набор дополнительных таблиц отображения здесь явно меньше.
Описание разделителей и других символов в таблице:
Img |
SYM |
NAME |
HEX |
OCT |
DEC |
|
|
! |
|
! |
|
|
|
! |
|
? |
|
? |
|
|
|
? |
|
. |
|
. |
|
|
|
. точка |
|
, |
|
, |
|
|
|
, запятая |
|
|
|
|
|
|
|
Матем. знак умножить * |
|
/ |
|
/ |
|
|
|
Разделить деление |
|
- |
|
- |
|
|
|
Это математический знак минус |
|
+ |
|
+ |
|
|
|
плюс |
|
- |
|
- |
|
|
|
- это не минус, а тире (не обязательно, т. к. дублирует вн.вид и часть функций минуса) |
|
― |
|
― |
|
|
|
Дефис? - признак возможности переноса части слова |
|
― |
|
- |
|
|
|
Ещё похоже на тире, но... знак зачеркнуть символ (или BS + горизонтальная черта) |
|
‗ |
|
‗ |
|
|
|
подчеркнуть |
|
‾ |
|
‾ |
|
|
|
надчеркнуть |
|
~ |
|
~ |
|
|
|
~ тильда |
|
≈ |
|
≈ |
|
|
|
≈ примерно равно |
|
: |
|
: |
|
|
|
: |
|
; |
|
; |
|
|
|
; |
|
' |
|
' |
|
|
|
' апостроф |
|
" |
|
" |
|
|
|
" двойные кавычки |
|
` |
|
` |
|
|
|
` обратная кавычка одиночная |
|
| |
|
| |
|
|
|
| вертикальная черта знак ИЛИ |
|
\ |
|
\ |
|
|
|
\ обратный слэш наклон |
|
[ |
|
[ |
|
|
|
[ |
|
] |
|
] |
|
|
|
] |
|
{ |
|
{ |
|
|
|
{ |
|
} |
|
} |
|
|
|
} |
|
< |
|
< |
|
|
|
< |
|
= |
|
= |
|
|
|
= присвоить, равно |
|
> |
|
> |
|
|
|
> |
|
≠ |
|
≠ |
|
|
|
≠ не равно |
|
" |
|
" |
|
|
|
" |
|
" |
|
" |
|
|
|
" |
|
@ |
|
@ |
|
|
|
@ |
|
# |
|
# |
|
|
|
# |
|
$ |
|
$ |
|
|
|
$ - доллар |
|
& |
|
& |
|
|
|
& AND |
|
% |
|
% |
|
|
|
% процент = 1/100 |
|
£ |
|
£ |
|
|
|
£ - фунт ? |
|
? |
|
? |
|
|
|
? - солнышко, рубль? |
|
¥ |
|
¥ |
|
|
|
¥ - йена |
|
₤ |
|
₤ |
|
|
|
₤ |
|
? |
|
? |
|
|
|
? - евро |
|
? |
|
? |
|
|
|
? - номер |
|
No |
|
No |
|
|
|
No копирайт - торг марка |
|
|
|
|
|
|
|
параграф |
|
R |
|
R |
|
|
|
R права (чьи?) |
|
^ |
|
^ |
|
|
|
^ степень - "крыша" |
|
|
|
|
|
|
|
число пи = 3,1415926535 |
|
º |
|
º |
|
|
|
º градус (Цельсия, Фаренгейта) |
|
¹ |
|
¹ |
|
|
|
¹ степень числа - не обязателен - есть верхний индекс цифр |
|
² |
|
² |
|
|
|
² |
|
³ |
|
³ |
|
|
|
³ |
|
½ |
|
½ |
|
|
|
½ дроби или степень??? |
|
¼ |
|
¼ |
|
|
|
¼ |
|
¾ |
|
¾ |
|
|
|
¾ |
|
% |
|
% |
|
|
|
% промиле = 1/1000 |
|
⅓ |
|
⅓ |
|
|
|
⅓ |
|
⅔ |
|
⅔ |
|
|
|
⅔ |
|
⅛ |
|
⅛ |
|
|
|
⅛ |
|
⅜ |
|
⅜ |
|
|
|
⅜ |
|
⅝ |
|
⅝ |
|
|
|
⅝ |
|
⅞ |
|
⅞ |
|
|
|
⅞ |
|
∞ |
|
∞ |
|
|
|
∞ бесконечность |
|
√ |
|
√ |
|
|
|
√ корень квадратный |
|
∑ |
|
∑ |
|
|
|
∑ сумма |
|
+ |
|
+ |
|
|
|
+ плюс минус |
|
≤ |
|
≤ |
|
|
|
≤ меньше или равно |
|
≡ |
|
≡ |
|
|
|
≡ тождественно эквивалентно |
|
≥ |
|
≥ |
|
|
|
≥ больше или равно |
|
∫ |
|
∫ |
|
|
|
∫ интеграл |
|
⌠ |
|
⌠ |
|
|
|
⌠ |
|
⌡ |
|
⌡ |
|
|
|
⌡ |
|
← |
|
← |
|
|
|
← - стрелки одинарные |
|
→ |
|
→ |
|
|
|
→ |
|
↑ |
|
↑ |
|
|
|
↑ |
|
↓ |
|
↓ |
|
|
|
↓ |
|
↔ |
|
↔ |
|
|
|
↔ |
|
↕ |
|
↕ |
|
|
|
↕ |
|
▲ |
|
▲ |
|
|
|
|
|
► |
|
► |
|
|
|
|
|
▼ |
|
▼ |
|
|
|
|
|
◄ |
|
◄ |
|
|
|
|
|
♠ |
|
♠ |
|
|
|
|
|
♣ |
|
♣ |
|
|
|
|
|
♥ |
|
♥ |
|
|
|
|
|
♦ |
|
♦ |
|
|
|
|
|
|
|
|
|
|
|
И т. д. И т.п. |
|
Окончательный состав можно определить только в практическом исполнении при обсуждении правил и преимуществ применения.
Третья таблица напрашивается с изображениями бытовых приборов и т. п. - телефонов, огнетушителей, цветов, смайликов... - типа Webdings, Symbol.
Следующая - четвёртая - таблица кодировки ЗВУКОВ, принятая в академической среде лингвистов (ИМХО) позволит интересные возможности в обучающей среде. Но это отдельная песня.
Арабские и другие таблицы требуют своих конструкторов правил вывода, поэтому здесь я даже не рассматриваю их. Наработки Unicoda позволяют решить эти задачи с использованием заголовка кода.
Русские символы - это вообще отдельная история - смотрите Wiki http://ru.wikipedia.org/wiki/"Википедия Проект: "Внесение_символов_алфавитов_народов_России_в_Юникод.htm". Вполне можно создать набор таблиц для русско-язычных символов. Поэтому я предлагаю 2 байта для нумерации таблиц - возможность расширения наборов дорогого стоит.
Таблицы других стран могут входить в общую нумерацию или как для перекодировки. Правила вывода на экран (типа справа налево, сверху вниз) зависят от номера кодовой страницы в любом случае их применения.
Таблица перекодировки примерно такая:
Code EvA |
img |
Name |
Unicode |
CP-1251 |
OEM 866 |
Другие |
00 |
|
NULL |
0000 |
00 |
00 |
|
01 |
|
START OF HEADING Code Page ? |
Нет |
Нет |
Нет |
Нет |
.... |
.... |
......... |
|
|
|
|
10 |
Spc |
SPACE |
0020 |
20 |
20 |
|
11 |
. |
FULL STOP |
002E |
2E |
2E |
|
12 |
, |
COMMA |
002С |
2С |
2С |
|
13 |
: |
COLON |
003A |
3A |
3A |
|
.... |
.... |
.................. |
|
|
|
|
20 |
0 |
DIGIT ZERO |
0030 |
30 |
30 |
|
21 |
1 |
DIGIT ONE |
0031 |
31 |
31 |
|
22 |
2 |
DIGIT TWO |
0032 |
32 |
32 |
|
.... |
..... |
................ |
|
|
|
|
52 |
a |
LATIN SMALL LETTER A CYRILLIC SMALL LETTER A ........... |
0061 |
61 |
61 |
|
... |
.... |
................ |
|
|
|
|
Преимущества - Вытекают из достоинств.
Недостатки - из преимуществ.
Дмитрий указывает на 2 цели:
- поиск независимо от БОЛЬШИХ / малых букв;
- работа с текстами и данными большинства европейских языков в пределах одной кодировки, знаки, обслуживающие переписку наибольшего количества людей на земле.
Вспомогательный бонус - форматирование вывода на экран терминалов в символьном режиме (если позволяет терминал). Нет возможности - игнорирует форматирование (модификацию) символов.
Дополнительно большее количество таблиц кодировок символов и соответственно самих символов (новых стандартов и старых исторических начертаний).
Недостатки
Переключение языковых раскладок клавиатур и кодовых таблиц требует переключение на правила оформления согласно требованиям страны-языка (наиболее известны десятичная точка или запятая, формат даты, порядок вывода на экран - справа налево, сверху вниз), индексирование для сортировки по алфавиту конкретного языка. Проблемы перекодировки разных языков остаются.
Требование наличия для одной кодировки 2-х и больше (БОЛЬШИЕ/малые, индексы, курсив...) таблиц изображений символа для вывода на экран терминала. Практически эти таблицы уже применяются во всех ОС, как кэш True Font.
Фактически создана новая таблица кодов символов для евро-азиатских алфавита языков. Наличие дублированных изображений похожих символов(строчных-малых как основных) в разных местах для (единой) сортировки, как и наложения 2-х и более символов в одной позиции лично мне кажется недостатком - грубой ошибкой. Всё равно придётся применять индексы сортировки для алфавита каждой страны, а одно изображение для разных кодов создаёт неоднозначность поиска информации.
Второй факт - создание нового (терминального - бинарного) формата плоского текста. Т-экс-т (txt) заменяется на Т-ерминальный Т-екс-т (ttx), который уже не будет плоским!!!(ИМХО).
В приложении Wiki-Юникод (см. ниже) перечислены доводы для внедрения Единой таблицы символов, выбор количества байт для кодировки каждого символа и встроенные недостатки. Дмитрий предлагает (и я его поддерживаю) вернуться к идее набора таблиц, как более логической конструкции в повседневной жизни (практике).
Красиво было на бумаге, но забыли про овраги...
Что делать, что делать...-трясти надо!
Как сказано у Дмитрия:
"Все мы бессознательно воспринимаем международные организации как созданные пользователями и для пользователей, на самом деле скинулись мужчины, у которых деньги есть. Да и скинулись в основном, чтобы перекрыть ветер в паруса конкурентов. Кроме W3C автор имел возможность убедиться в этом и в ISO JTC1 SC32 WG3, где ключевые посты заняты представителями Oracle, Microsoft и IBM. Отсюда и расходы на программиста, например, под Oracle превышают стоимость дистрибутива Oracle."
Практически нужны такие вот парни, создать сайт с материалами по кодировке, выложить на FTP svn - дерево проекта, Wiki-форум для обмена "любезностями" и примеры программ-читалок для обкатки на практике. Но в настоящее время внедрение возможно только при открытости и бесплатности.
Одной из программ напрашивается терминал типа putty - с открытым исходным кодом. На нём обкатать вывод на экран, состав символов и их кодов, переключатель раскладок клавиатуры и режимы редактирования текста, т. е. программа - редактор для новой кодировки. Напомню, что альтернативная кодировка CP-866 появилась именно при работе практиков в ДОС с 2-мя алфавитами одновременно. И пошла работать - до сих пор в СНГ и не только.
Программа и таблицы перекодировки (соответствий) между другими таблицами - cp866, cp1251, Unicode и т. д. Эта кодировка прямо напрашивается в Linux(*nix).
Следущей программой должна быть База Данных типа PostgreSQL - для обкатки индексации сортировки и поиска в много-языковых данных. И именно она будет главным критерием результата.
И венцом творения - адаптация (приспособление) инструментов языков программирования Си, Ява, PHP,и т. п.
А ещё... и ещё... и во-обще....
Ну о-очень хотелось бы поиметь ОС с новой системой кодировки, как настольную, так и серверную (сетевую), а лучше универсальную (модульную) типа QNX, L4xxx с открытым кодом, объектную и возможностью встраивания в отдельные устройства независимо от типа процессора.
Для справки и гордости - от чего шли и до чего дошли в техническом развитии.
Я принял решение разместить дополнительные материалы в тексте - в конце статьи - чтобы не искать и быстро просмотреть и сравнить.
Сама статья написана быстро, но потом проверил по Интернету свою долговременную память и кое-что подправил. А потом прочитал ещё раз и добавил все спорные статьи в конец - вдруг кому-то лень будет искать. И ещё раз поправил (расширил) формулировки для уточнения смысла. Больше всего времени угрохал на таблицы новых кодировок по Д.Тюрину - поиск изображений в Unicode. Что не нашёл - не заполнил в таблицах. И так понятно и наглядно. Хотя и сумбурно.
Ссылки минимально, поиск даёт ну о-очень много.
http://careers.stackoverflow.com/Unicode001.html/ascii.png
http://careers.stackoverflow.com//Unicode_files/oem.png
http://www.3dnews.ru/editorial/razgovor_tekstom//139032.jpg
http://ru.wikipedia.org/wiki/МТК-2.htm
http://www.sd-company.su/terminals.htm
http://ru.wikipedia.org/wiki/Юникод_wiki.htm
http://www.unicode.org/Charts.htm
Получилось то, что получилось - статья-воспоминание и лекционные материалы по истории.
Май 2011 г. -февраль 2012 г.
Букреев А.Г.
Для сравнения привожу основную таблицу кодировки IBM PC Latin 1 с ещё с двумя таблицами настоящего времени, широко применяемые в нашей стране (и не только):
Объединенный Латинско-Кириллический Алфавит по Д.Тюрину
Тюрин Дмитрий, sql50@narod.ru
Понятие терминала (DTE - оконечное оборудование данных) в соответствии с телекоммуникационными стандартами относится к сочетанию устройств ввода и вывода информации (например, сканер и принтер и тому подобное), однако чаще всего под терминалом понимается оконечное устройство ЭВМ, компьютер, предназначенное для создания диалога "человек - машина". Известны также более специализированные и распространенные устройства - банкоматы, кассовые аппараты со сканерами штрих-кода и так далее.
Первоначально в компьютерах (ЭВМ) в качестве терминалов использовались механические устройства, заимствованные из смежных технологий (связь и оргтехника) - телетайпы (типа ТА-67), телеграфные аппараты (СТА-2М), электрические пишущие машинки (ПМ типа CONSUL). Это был довольно длительный период, в течение которого сложились определенные стандарты, приемы работы оператора и протоколы ввода/вывода и интерпретации данных. Строка информации, вводимая оператором, являлась, как правило, командой, требующей выполнения определенных действий от ЭВМ (ОС). Конечная ширина листа (или бумажной ленты) печатающая машинка (80 знаков) ограничивала длину возможных команд. Признаком окончания ввода команды являлось нажатие клавиши <вк> (возврат каретки, она же "CR" - "Carriage Return", "Return", "Enter" и прочее и так далее, названий много). Реакция системы (ответ на запрос, сообщение об ошибке, небольшая порция выходных данных) также выводилась строками по 80 символов, образуя вместе с копиями команд протокол диалогового сеанса (или журнал - log) в бумажной форме.
В ранних версиях операционной системы OS/360 и других систем того времени единственный механический терминал устанавливался в машинном зале и предназначался для оператора ЭВМ. Это устройство получило название консоль [2] (console).
Появление в начале 1970 годов электронных терминалов, специально разработанных для использования с компьютерами, привело к настоящему перевороту в применении машин, существенно приблизив все типы пользователей к вычислительному процессу, облегчив разработку и отладку программ, а также эксплуатацию автоматизированных систем.
С появлением Интернет, терминалы стали расширяться и распространяться с новой силой.
Как известно, в строительстве и архитектуре консолью именуют конструкцию, состоящую из горизонтальной балки, опирающейся на подкос. Именно так выглядит столик для пультов оператора, прикрепленный к инженерному пульту управления большой ЭВМ.
VT01
----
VT01A-запоминающий дисплей на запоминающей трубке Tektronix Model 611 с разрешением 400 пар вертикальных линий и 300 пар горизонтальных линий.
Рисование точки 20 мкс, полная заливка экрана 500 мс. VT01 может отобразить 30000 разрешенных точек. К шине UNIBUS подключается через преобразователи AA11-A, AA11-D.
VT05
----
VT05B-алфавитно-цифровой дисплей с собственной клавиатурой.
Отображает одновременно до 1440 символов. Интерфейс полностью аналогичен телетайпу. Скорости обмена:
110,150,300,600,1200,2400 бод. Может работать дуплексом или полудуплексом. Имеет режимы работы в полном ASCII (большие и маленькие буквы) и в неполном - только большие. Имеет непосредственную адресацию курсора. VT05 имеет ввод с телекамеры и способен отображать видеообразы одновременно с алфавитно - цифровой информацией из машины. Может
работать с подчиненными мониторами в системах без управляющего компьютера.
Формат экрана 20 строк по 72 позиции.
VT50
----
Формат экрана: 12 строк по 80 символов. Отрабатывается
одновременное нажатие не более трех клавиш, возможное при быстром
наборе. Если одна из первых двух нажатых клавиш была отпущена раньше
третьей, набранный текст будет верным. Курсор имеет вид мигающего
подчерка. Матрица символа 5х7 точек.
Курсор может перемещаться с клавиатуры или программно: в
левый верхний угол; вправо; влево; вверх; вниз. Имеется табулятор,
фиксируемый на каждой восьмой позиции строки. Есть возможность
удалить символы от курсора до конца строки или до конца экрана. При
приеме из канала отображаемые символы запоминаются в памяти. Перед
отображением все коды преобразуются к верхнему регистру.
Алгоритм
преобразования (кодов ASCII, в которых работают терминалы DEC)
нижнего регистра к верхнему: если седьмой бит равен "1",
очистить шестой бит.
Принятый код 177 рассматривается как заполнитель, и не вызывает никакой реакции, что предусмотрено для совместимости с медленными механическими устройствами. Передается код 177 при нажатии клавиши DEL. Если клавиша DEL используется для забоя предыдущего символа, программное обеспечение должно сформировать последовательность "влево, пробел, влево".
Команды и ESCape последовательности.
В КОИ-7 коды от 000 до 037 являются управляющими. VT50
отрабатывает шесть из них:
Octal Action
007 звонок
010 курсор влево
011 горизонтальная табуляция. Позиционирует
курсор на следующую кратную 8 позицию, если она не более, чем 72-я.
Далее - на каждую последующую.
012 перевод строки. Опускает
курсор на одну строку.
015 возврат каретки. Курсор до упора
влево.
033 переводит терминал в ESCape-моду. Если он уже в
ESC-моде, то переводит обратно в нормальную моду. После перехода в
ESC-моду следующий принятый код рассматривается как команда.
ESC sequences:
Octal Char Action Taken
033 ESC Изменяет моду.
101 A курсор вверх
103 B курсор
вправо
110 H "Home"- курсор в левый верхний угол.
112 J стереть текст от курсора до конца экрана.
113 K стереть
текст от курсора до конца строки.
132 Z чтение идентификатора
типа терминала: терминал
отвечает в линию определенную кодовую
последовательность. VT50 with copier: 033 057 102;
VT50 with no
copier: 033 057 101;
133 [ включает режим задержанного вывода
134 \ выключает режим задержанного вывода.
Скорости обмена,
бод: 75, 110, 150, 300, 600, 1200, 2400, 4800, 9600.
Имеется режим
отключения от линии. При работе в полудуплексном режиме может быть
использован режим отработки набираемых на клавиатуре символов (local
copy) , включаемый аппаратно переключателем. Роллинг обычный и только
вверх.
VT52
----
Формат экрана: 24 строки по 80
символов. Кодировка ASCII.
Отображаются большие и маленькие
символы. Совместим вверх с VT50. По идентификационной
последовательности программное обеспечение может определить тип
дисплея. Программы, использующие моду задержанного вывода для
межэкранных пересылок, написанные под VT50 будут работать без
изменений, несмотря на различную емкость экрана.
Команды и
ESCape последовательности.
Octal Action
BEL 007 звонок
BS 010 курсор влево (но не
левее конца строки)
TAB 011 горизонтальная табуляция.
Позиционирует курсор на позиции:
9,17,25,33,41,49,57,65,73,74,75,76,77,78,79,80.
LF 012 перевод
строки. Опускает курсор на одну строку. Если
последняя -
скроллинг.
CR 015 возврат каретки. Курсор до упора
влево.
ESC 033 переводит терминал в ESCape-моду. Если он уже в
ESC-моде, то переводит обратно в нормальную моду. После перехода в
ESC-моду следующий принятый код рассматривается как команда.
040-176 пробел и отображаемые символы. Печатаются на экране.
NUL 000 игнорируется
DEL 177 игнорируется
ESC
sequences:
Octal Effect
ESC = 033 075 в режим
дополнительной клавиатуры. В этом режиме клавиши дополнительной
клавиатуры выдают уникальные ESC-последовательности.
ESC > 033
076 выход из режима дополнительной клавиатуры в обычный режим.
ESC
A 033 101 курсор вверх на сторку. Не скроллирует, упирается в
верхний край экрана.
ESC B 033 102 курсор вниз на строку. Не
скроллирует.
ESC C 033 103 курсор вправо на позицию, пока не
упрется. Последняя литера не забивается.
ESC D 033 104 курсор
влево на позицию, пока не упрется. Аналог BS.
ESC H 033
110 курсор в начало экрана: левый верхний угол.
ESC I 033
111 курсор на строку вверх, если уперся - скроллинг вниз.
ESC
J 033 112 стирает все от курсора до конца экрана
ESC K 033
113 стирает все от курсора до конца строки
ESC Y 033 131 прямая
адресация курсора
ESC Z 033 132 чтение идентификатора типа
терминала: терминал отвечает в линию определенную кодовую
последовательность.
ESC [ 033 133 вход в моду задержанного
вывода
ESC \ 033 134 отменяет задержанный вывод
Прямая
адресация курсора:
ESC Y Line# Column#
Line# - одна
литера: код 040-верхняя строка, 041-вторая...
067-последняя.
Column# - одна литера от 040 (левая позиция) до 157 (самая
правая)
Курсор перемещается в указанную позицию.
033 110
эквивалентно 033 131 040 040
Клавиша "BREAK"
подвешивает линию в "0" пока нажата. Введена для
совместимости с программным обеспечением, написанным под полудуплекс.
Клавиша "REPEAT" разрешает автоповтор нажатого
символа.
Клавиши "SHIFT" изменяют текущий
верхний/нижний регистр на
противоположный, пока нажаты.
Клавиша
"CAPS LOCK" фиксирует верхний регистр независимо от
нажатости клавиш переключения регистров, но только для букв.
Клавиша
"CONTROL" обнуляет два старших бита каждой нажимаемой (при
нажатой "CONTROL") клавиши и вызывает передачу в линию
кодов 000-037.
Коды дополнительной клавиатуры:
KEY
LABEL IN NUMERIC- IN ALTERNATE-KEYPAD MODE
0 0 ESC ?
p
1 1 ESC ? q
2 2 ESC ? r
3 3 ESC ? s
4 4 ESC
? t
5 5 ESC ? u
6 6 ESC ? v
7 7 ESC ? w
8 8 ESC
? x
9 9 ESC ? y
. . ESC ? n
- - ESC ? m
, , ESC
? l
ENTER CR ESC ? M
up arrow ESC A ESC A
down
arrow ESC B ESC B
right arrow ESC C ESC C
left arrow ESC
D ESC D
left blank key PF1 ESC P ESC P
center blank key
PF2 ESC Q ESC Q
right blank key PF3 ESC R ESC R
PF4 ESC
S ESC S
Клавиши CONTROL, SHIFT, CAPS LOCK не влияют на коды
дополнительной клавиатуры в обеих модах. Клавиша SCROLL имеет смысл
только в моде задержанного вывода. Разрешает скроллинг одной строки
либо всего экрана.
В случае заполнения доступной части экрана, потребности вывести еще строку и задержанном выводе дисплей выдаст код XOFF (023) для торможения программы вывода. Для продолжения обмена посылается код XON (021).
VT100 (ANSI)
------------
Управляющие
символы.
SYMB NAM HEX DEC OCT Action for VT100
NIL
00 000. 000 игнорируется
^A SON 01 001. 001
^B STX 02 002. 002
^C ETX 03 003. 003
^D EOT 04 004. 004
^E ENQ 05 005. 005 запрос
^F ACK 06 006. 006
^G BEL 07 007. 007 звонок
^H BS 08 008. 010 влево
^I HT 09 009. 011 табуляция
^J LF 0А 010. 012 перевод
строки
^K VT 0B 011. 013 перевод строки(вертикальная
табуляция)
^L FF 0C 012. 014 перевод строки(перевод
формата)
^M CR 0D 013. 015 возврат каретки
^N SO 0Е 014. 016 набор
символов 1
^O SI 0F 015. 017 набор символов
0
^P DLE 10 016. 020 AP1
^Q DC1 11 017. 021 востоновить
передачу ' XON '
^R DC2 12 018. 022 DC2
^S DC3 13 019. 023 прервать
передачу ' XOFF
'
^T DC4 14 020. 024
^U NAK 15 021. 025
^V SYN 16 022. 026
^W ETB 17 023. 027
^X CAN 18 024. 030 аннулировать
^Y EM 19 025. 031
^Z SUB 1А 026. 032 аннулировать(символ
замены)
^[ ESC 1B 027. 033 АР2
^\ FS 1C 028. 034
^] GS 1D 029. 035
^^ RS 1E 030. 036
^_ US 1F 031. 037
DEL 7E исключение
(забой)
Управляющие последовательности.
ESC
= прикладной режим доп.клв. ENTER KEYPAD APPLICATION MODE
ESC
=0 Enter Auto Auxilatory Mode
ESC > цифровой режим доп.клв.
ENTER KEYPAD NUMERIC MODE
ESC A
ESC B
ESC C
ESC
D активная позиция вниз на одну строку
ESC E активная позиция в
начало следующей строки
ESC F
ESC G
ESC H установить
табулятор SET TAB AT CURRENT COLUMN
ESC I
ESC J
ESC K
ESC
L
ESC M MOVE CURSOR UP ONE LINE
ESC N
ESC O
ESC P
ESC
Q
ESC R
ESC S
ESC T
ESC U
ESC V
ESC W
ESC X
ESC
Y
ESC Z
ESC c сброс
ESC 0 ENTER CONCURRENT AUXILATORY
MODE
ESC 1 ENTER AUXILATORY CONTROL MODE
ESC 2 EXIT
AUXILATORY CONTROL MODE
ESC 3
ESC 4
ESC 5
ESC
6
ESC 7 сохранить поз. маркера , набор , граф.интерпретацию
ESC
8 востоновление маркера, номера набора символов и
интерпретации
граф.символов.
ESC #0
ESC #1 Exit Auto Auxilatory or
Concurrent Auxilatory
ESC #2 Output Cursor line to Auxilatory
ESC
#3 строка двойной высоты верхняя половинаА
ESC #4 строка двойной
высоты нижняя половина
ESC #5 cтрока единичной ширины.
ESC
#6 строка двойной ширины
ESC #8 заполнение экрана символом Е
ESC
#9
ESC #> Perform keyclick
ESC [PnA вверх Move cursor
up n lines (1)
ESC [PnB вниз Move cursor down n lines (1)
ESC
[PnC вправо Move cursor forward (right) n places (1)
ESC
[PnD влево Move cursor back (left) n places (1)
ESC [ E
ESC
[ F
ESC [ G
ESC [Pn;PnH позиция маркера Position cursor
to n row, n column (1,1)
ESC [H Перемещение курсора в верхний
левый угол.
ESC [ I
ESC [J Стирание всего, что ниже
курсора.
ESC [0J стирание символов с активной позиции до конца
экрана
ESC [1J стирание символов с исходной до активной
позиции
ESC [2J стирание символов всего экрана
ESC
[>3;RT;CL;RB;CRJ Erase all within top row (RT); left column (CL);
bottom row (RB); right column (CR)
ESC [K Стирание
правой от курсора части строки.
ESC [0K стирание символов от
курсора до конца строки (0)
ESC [1K от начала строки до
курсора
ESC [2K всей строки
ESC [>3;CL;CRK Erase within
line from left column (CL) to right column (CR)
ESC [ L
ESC
[ M
ESC [ N
ESC [ O
ESC [ P
ESC [ Q
ESC
[ R
ESC [ S
ESC [ T
ESC [ U
ESC [ V
ESC
[ W
ESC [ X
ESC [ Y
ESC [ Z
ESC [ a
ESC [ b
ESC [ c
ESC [ d
ESC [ e
ESC
[Pn;Phf установление активной позиции Pn СТРОКА ,Ph СТОЛБЕЦ Same as
ESC Pn;PnH (1,1)
ESC [0g CLEAR TAB AT CURSOR COLUMN
POSITION
ESC [1g
ESC [2g
ESC [3g CLEAR ALL TAB STOPS
ESC
[>5g SET TABS EVERY 8 COLUMNS
ESC [2h Блокирование
клавиатуры.
ESC [12h Выключение эха.
ESC [20h SET NEW LINE MODE
(AUTO LF WITH CR)
ESC [?0h
ESC [?1h SET CURSOR KEY APPLICATION
MODE
ESC [?2h SET ANSI MODE
ESC [?3h SET 132COLUMNS MODE
ESC
[?4h SET SMOOTH SCROLL MODE (6 LINES A SECOND)
ESC [?5h SET
REVERSE SCREEN MODE
ESC [?6h SET ORIGIN MODE (CURSOR TO START
POS.)
ESC [?7h SET AUTO WRAPAROUND MODE (CRLF AT LINE END)
ESC
[?8h SET AUTO REPEAT MODE
ESC [?9h SET 240INTERLACE MODE
ESC
[?25h Включить курсор.
ESC [?
ESC [?>h
ESC
[>0h
ESC [>1h
ESC [>2h
ESC [>3h SET HEX
KEYPAD MODE
ESC [>4h SET CLEAR SCREEN ON FORM FEED
ESC
[>5h
ESC [>6h SET IGNORE INCOMING XOFF
ESC [>7h
ESC
[>8h
ESC [>9h
ESC [>10h
ESC [>11h SET ERASE
PAGE WITHIN MARGINS
ESC [>12h SET TAB COMMAND WITH SPACES
ESC
[>13h
ESC [>14h SET HALF DUPLEX
ESC [ i
ESC
[ j
ESC [ k
ESC [2l Включение клавиатуры.
ESC
[12l Включение эха.
ESC [20l RESET NEW LINE MODE
ESC [?0l
ESC
[?1l RESET CURSOR KEY APPLICATION MODE
ESC [?2l RESET TO VT52
MODE
ESC [?3l RESET TO 80COLUMNS MODE
ESC [?4l RESET TO JUMP
SCROLL MODE
ESC [?5l RESET TO NORMAL SCREEN FROM REVERSE
SCREEN
ESC [?6l RESET TO CURSOR ORIGIN MODE (CURSOR TO HOME
POS.)
ESC [?7l RESET AUTO WRAPAROUND MODE
ESC [?8l RESET AUTO
REPEAT MODE
ESC [?9l RESET 240INTERLACE MODE
ESC
[?25l Выключить курсор.
ESC [?
ESC
[?>l
Ns= авто-возврат.
Ns= режим управления маркером в
доп.клв. -
передача клавишами стрелок и код
упровления.
Ns= чересстрочная развертка 480[240] линий,
Ns=
исходный режим в верх окна ограниченого полями [в верх
экрана].
Ns=?5 режим сдвига экрана, экран светлый [темный].
ESC
[>0l
ESC [>1l
ESC [>2l
ESC [>3l RESET TO
NORMAL (NON - HEXADECIMAL) KEYPAD MODE
ESC [>4l RESET TO FORM
FEED IS LINE FEED
ESC [>5l
ESC [>6l RESET TO INCOMING
XOFF ENABLED
ESC [>7l
ESC [>8l
ESC [>9l
ESC
[>10l
ESC [>11l RESET TO ERASE FULL SCREEN ON CLEAR
COMMANDS
ESC [>12l RESET TO TAB MOTION DIRECT
ESC [>13l
ESC
[>14l RESET TO FULL DUPLEX
ESC [0m SELECT NORMAL GRAPHIC
RENDATION, VISUAL WITH NO ATTRIBUTES
ESC [1m SELECT BOLD
CHARACTERS
ESC [2m
ESC [3m
ESC [4m UNDERLINE
CHARACTERS
ESC [5m BLINK CHARACTERS
ESC [6m
ESC
[7m SELECT REVERSE VIDEO CHARACTERS
ESC [8m
ESC [9m
ESC
[6n REPORT CURSOR POSITION, RESPONSE IS: ESC [line;columnR
ESC [
o
ESC [ p
ESC [0q Turn OFF LED KEY
ESC
[1q Turn ON LED KEY
ESC [RT;RBr SET SCROLLING REGION AT TOP
ROW (RT), BOTTOM ROW (RB)
DEFAULT IS ENTIRE SCREEN
ESC [ s
ESC [ t
ESC [ u
ESC [Pn;Pnv установить
верхнее нижнее поле.
ESC [0v MAKE CURSOR VISIBLE
ESC [1v
MAKE CURSOR INVISIBLE
ESC [2v MAKE CURSOR UNDERLINE
ESC [3v
MAKE CURSOR REVERSE BLOCK
ESC [4v MAKE CURSOR NON -
BLINKING
ESC [5v MAKE CURSOR BLINK
ESC [6v
ESC [7v
ESC
[8v
ESC [9v
ESC [0w ENABLE BLINKING ATTRIBUTE (0)
ESC
[1w
ESC [2w
ESC [3w
ESC [4w
ESC [5w
ESC [6w
ESC
[7w
ESC [8w
ESC [9w
ESC [ x
ESC [ 2, Ps
y тест надежности Ps СУММА:
1 пусковой
2 обратной
связи данных
4 модема
8 продолжительное
выполнение
0 без тестов выполнить сброс
ESC
[0z Keyboard data to Communications Port
ESC [1z Keyboard data
to Auxilatory port
ESC [2z Auxilatory Port to Communications
Port
ESC [3z Auxilatory Port to Display
ESC [4z Cease input
from Auxilatory Port
ESC (A набор символов 0 ИКЗ DESIGNATE
UK CHARACTER SET AS G0
ESC (B набор символов 0 КОИ-7 DESIGNATE
ASCII -"-
ESC (0 набор символов 0 ГРАФ.СИМВОЛЫ -"-
GRAPHIC -"-
ESC (1 DESIGNATE CYRILLIC CHARACTER SET AS
G0
ESC (2 набор символов 0 ПОСТОЯННАЯ ПАМЯТЬ ДЛЯ ДОП.
СИМВОЛОВ
ESC )A набор символов 1 ИКЗ
ESC )B набор
символов 1 КОИ-7
ESC )0 набор символов 1 ГРАФ.СИМВОЛЫ
ESC
)1 DESIGNATE CYRILLIC CHARACTER SET AS G1
ESC )2 набор
символов 1 ПОСТОЯННАЯ ПАМЯТЬ ДЛЯ ДОП. СИМВОЛОВ
ESC [ Pn
| запрос, в ответ ESC [?1;0c БЕЗ ДОПОЛНЕНИЙ
ESC Z |> ESC
[?1;1C ПДВ
^E | ESC [?1;2C РВВ
ESC [?1;3C ПДВ И
РВВ
ESC [?1;4C ГИ
ESC [?1;5C ГИ И ПДВ
ESC
[?1;6C ГИ И РВВ
ESC [?1;7C ГИ , ПДВ И РВВ
ПДВ -
процессорная дополнительная возможность
РВВ - расширенные
возможности видеомонитора
ГИ - возможность графического
изобрaжения
ESC [3N запрос о позиции маркера
ESC
[5n запрос о состоянии устройства
сообщение о состоянии
устройства: ESC [ Ps n
0 готовность, исправность 3
неисправность
ESC [<ЗАЯВ>x запрос о параметрах
видеотерминала
ОТВЕТ: ESC
[<ЗАЯВ>;<ЧЕТН>;
ЗАЯВ 0
разрешить незаявленые сообщения
1 запретить незаявленые
сообщения
2 сообщение о параметрах видиотерм.
3 сообщение
доклад.
ЧЕТ 1 нет контроля по четности/нечетности
4
контроль по нечетности
5 контроль по четности
N БИТЫ 1 8
бит
2 7 бит
СКОР ПЕР. И СКОР ПР. 0 - 50 БИТ/С 8 -
75
16 - 110 24 - 134 .....
112 - 9600 120
- 19200
УМН 1 скорость мумьтиплексирование
символов
16
ФЛАГ 0-15 ДЛЯ ПДВ
VT100 in VT52
mode
------------------
ESC A маркер вверх
ESC
B маркер вниз
ESC C маркер вправо
ESC D маркер влево
ESC
F псевдографика
ESC G выход из псевдографики
ESC
H маркер в верхний левый угол
ESC I маркер вверх, для первой
строки сдвиг экрана вниз
ESC J стирание экрана
ESC K стирание
строки
ESC Y Pn Ps прямая адресация курсора строка и столбец
ESC Z запрос, в ответ идет 'ESC/Z'
ESC = режим
дополнительной клавиатуры
ESC > выход из режима дополнительной
клавиатуры
ESC < вход в VT100
Кодировки символов
ASCII:
-------------------------
SYMB NAM HEX DEC OCT
NIL
00 000. 000
^A SON 01 001. 001
^B STX 02 002. 002
^C ETX 03 003. 003
^D EOT 04 004. 004
^E ENQ 05 005. 005
^F ACK 06 006. 006
^G BEL 07 007. 007
^H BS 08 008. 010
^I HT 09 009. 011
^J LF 0А 010. 012
^K VT 0B 011. 013
^L FF 0C 012. 014
^M CR 0D 013. 015
^N SO 0Е 014. 016
^O SI 0F 015. 017
^P DLE 10 016. 020
^Q DC1 11 017. 021
^R DC2 12 018. 022
^S DC3 13 019. 023
^T DC4 14 020. 024
^U NAK 15 021. 025
^V SYN 16 022. 026
^W ETB 17 023. 027
^X CAN 18 024. 030
^Y EM 19 025. 031
^Z SUB 1А 026. 032
^[ ESC 1B 027. 033
^\ FS 1C 028. 034
^] GS 1D 029. 035
^^ RS 1E 030. 036
^_ US 1F 031. 037
BLANK 20 032. 040
! 21 033. 041
" 22 034. 042
# 23 035. 043
$ 24 036. 044
% 25 037. 045
& 26 038. 046
' 27 039. 047
( 28 040. 050
) 29 041. 051
* 2A 042. 052
+ 2B 043. 053
, 2C 044. 054
- 2D 045. 055
. 2E 046. 056
/ 2F 047. 057
0 30 048. 060
1 31 049. 061
2 32 050. 062
3 33 051. 063
4 34 052. 064
5 35 053. 065
6 36 054. 066
7 37 055. 067
8 38 056. 070
9 39 057. 071
: 3A 058. 072
; 3B 059. 073
< 3C 060. 074
= 3D 061. 075
> 3E 062. 076
? 3F 063. 077
@ 40 064. 100
A 41 065. 101
B 42 066. 102
C 43 067. 103
D 44 068. 104
E 45 069. 105
F 46 070. 106
G 47 071. 107
H 48 072. 110
I 49 073. 111
J 4A 074. 112
K 4B 075. 113
L 4C 076. 114
M 4D 077. 115
N 4E 078. 116
O 4F 079. 117
P 50 080. 120
Q 51 081. 121
R 52 082. 122
S 53 083. 123
T 54 084. 124
U 55 085. 125
V 56 086. 126
W 57 087. 127
X 58 088. 130
Y 59 089. 131
Z 5A 090. 132
[ 5B 091. 133
\ 5C 092. 134
] 5D 093. 135
^ 5E 094. 136
_ 5F 095. 137
` 60 096. 140
a 61 097. 141
b 62 098. 142
c 63 099. 143
d 64 100. 144
e 65 101. 145
f 66 102. 146
g 67 103. 147
h 68 104. 150
i 69 105. 151
j 6A 106. 152
k 6B 107. 153
l 6C 108. 154
m 6D 109. 155
n 6E 110. 156
o 6F 111. 157
p 70 112. 160
q 71 113. 161
r 72 114. 162
s 73 115. 163
t 74 116. 164
u 75 117. 165
v 76 118. 166
w 77 119. 167
x 78 120. 170
y 79 121. 171
z 7A 122. 172
{ 7B 123. 173
| 7C 124. 174
} 7D 125. 175
~ 7E 126. 176
DEL 7F 127. 177
nul 80 128. 200
son 81 129. 201
stx 82 130. 202
etx 83 131. 203
eot 84 132. 204
enq 85 133. 205
ack 86 134. 206
bel 87 135. 207
bs 88 136. 210
ht 89 137. 211
lf 8A 138. 212
vt 8B 139. 213
ff 8C 140. 214
cr 8D 141. 215
so 8E 142. 216
si 8F 143. 217
dle 90 144. 220
dc1 91 145. 221
dc2 92 146. 222
dc3 93 147. 223
dc4 94 148. 224
nak 95 149. 225
syn 96 150. 226
etb 97 151. 227
can 98 152. 230
em 99 153. 231
sub 9A 154. 232
esc 9B 155. 233
fs 9C 156. 234
gs 9D 157. 235
rs 9E 158. 236
us 9F 159. 237
blank A0 160. 240
! A1 161. 241
" A2 162. 242 Символ
"цент".
# A3 163. 243 Символ "фунт
стерлингов".
$ A4 164. 244
% A5 165. 245 Символ
"иена"..
& A6 166. 246
' A7 167. 247 Символ
"параграф".
( A8 168. 250 Альтернативное изображение
доллара.
) A9 169. 251 Символ защиты авторских
прав.
* AA 170. 252 Подчеркнутая буква а с
подъемом.
+ AB 171. 253 Символ "много
меньше".
, AC 172. 254
- AD 173. 255
. AE 174. 256
/ AF 175. 257
0 B0 176. 260 Символ
"градус".
1 B1 177. 261 Символ "плюс
минус".
2 B2 178. 262 Символ "квадрат числа (сноска
2)".
3 B3 179. 263 Символ "куб числа (сноска
3)". .
4 B4 180. 264
5 B5 181. 265 .Греческая буква
мю.
6 B6 182. 266 Условное обозначение клавиши
<ЗБ>.
7 B7 183. 267 Символ
"умножить".
8 B8 184. 270
9 B9 185. 271 Сноска
1.
: BA 186. 272 Изображение номера.
; BB 187. 273 Символ
"много больше".
< BC 188. 274 Символ "одна
четвертая".
= BD 189. 275 Символ
"половина"..
> BE 190. 276
? BF 191. 277
ю C0 192. 300
а C1 193. 301
б C2 194. 302
ц C3 195. 303
д C4 196. 304
е C5 197. 305
ф C6 198. 306
г C7 199. 307
х C8 200. 310
и C9 201. 311
й CA 202. 312
к CB 203. 313
л CC 204. 314
м CD 205. 315
н CE 206. 316
о CF 207. 317
п D0 208. 320
я D1 209. 321
р D2 210. 322
с D3 211. 323
т D4 212. 324
у D5 213. 325
ж D6 214. 326
в D7 215. 327
ь D8 216. 330
ы D9 217. 331
з DA 218. 332
ш DB 219. 333
э DC 220. 334
щ DD 221. 335
ч DE 222. 336
ъ DF 223. 337
Ю E0 224. 340
А E1 225. 341
Б E2 226. 342
Ц E3 227. 343
Д E4 228. 344
Е E5 229. 345
Ф E6 230. 346
Г E7 231. 347
Х E8 232. 350
И E9 233. 351
Й EA 234. 352
К EB 235. 353
Л EC 236. 354
М ED 237. 355
Н EE 238. 356
О EF 239. 357
П F0 240. 360
Я F1 241. 361
Р F2 242. 362
С F3 243. 363
Т F4 244. 364
У F5 245. 365
Ж F6 246. 366
В F7 247. 367
Ь F8 248. 370
Ы F9 249. 371
З FA 250. 372
Ш FB 251. 373
Э FC 252. 374
Щ FD 253. 375
Ч FE 254. 376
del FF 255. 377
Квитирование - Процесс, в результате которого два независимых друг от друга устройства координируют свои сигналы и получают возможность работать совместно.
А по сути - подтверждение приёма-передачи структурной единицы информации.
Юнико́д[1] или Унико́д[2] (англ. Unicode) - стандарт кодирования символов, позволяющий представить знаки практически всех письменных языков.[3]
Стандарт предложен в 1991 году некоммерческой организацией "Консорциум Юникода" (англ. Unicode Consortium, Unicode Inc.).[4][5] Применение этого стандарта позволяет закодировать очень большое число символов из разных письменностей: в документах Unicode могут соседствовать китайские иероглифы, математические символы, буквы греческого алфавита, латиницы и кириллицы, при этом становится ненужным переключение кодовых страниц.[6]
Стандарт состоит из двух основных разделов: универсальный набор символов (англ. UCS, universal character set) и семейство кодировок (англ. UTF, Unicode transformation format). Универсальный набор символов задаёт однозначное соответствие символов кодам - элементам кодового пространства, представляющим неотрицательные целые числа. Семейство кодировок определяет машинное представление последовательности кодов UCS.
Коды в стандарте Юникод разделены на несколько областей. Область с кодами от U+0000 до U+007F содержит символы набора ASCII с соответствующими кодами. Далее расположены области знаков различных письменностей, знаки пунктуации и технические символы. Часть кодов зарезервирована для использования в будущем.[7] Под символы кириллицы выделены области знаков с кодами от U+0400 до U+052F, от U+2DE0 до U+2DFF, от U+A640 до U+A69F (см. Кириллица в Юникоде).[8]
|
К концу 1980-х годов стандартом стали 8-битные символы, при этом существовало множество разных 8-битных кодировок, и постоянно появлялись всё новые. Это объяснялось как постоянным расширением круга поддерживаемых языков, так и стремлением создать кодировку, частично совместимую с какой-нибудь другой (характерный пример - появление альтернативной кодировки для русского языка, обусловленное эксплуатацией западных программ, созданных для кодировки CP437). В результате появилась необходимость решения нескольких задач:
Проблема "кракозябр" (отображения документов в неправильной кодировке):[6] её можно было решить либо последовательным внедрением методов указания используемой кодировки, либо внедрением единой для всех кодировки.
Проблема ограниченности набора символов:[6] её можно было решить либо переключением шрифтов внутри документа, либо внедрением "широкой" кодировки. Переключение шрифтов издавна практиковалось в текстовых процессорах, причём часто использовались шрифты с нестандартной кодировкой, т. н. "dingbat fonts" - в итоге при попытке перенести документ в другую систему все нестандартные символы превращались в кракозябры.
Проблема преобразования одной кодировки в другую: её можно было решить либо составлением таблиц перекодировки для каждой пары кодировок, либо использованием промежуточного преобразования в третью кодировку, включающую все символы всех кодировок.[9]
Проблема дублирования шрифтов: традиционно для каждой кодировки делался свой шрифт, даже если эти кодировки частично (или полностью) совпадали по набору символов: эту проблему можно было решить, делая "большие" шрифты, из которых потом выбираются нужные для данной кодировки символы - однако это требует создания единого реестра символов, чтобы определять, чему что соответствует.
Было признано необходимым создание единой "широкой" кодировки. Кодировки с переменной длиной символа, широко использующиеся в Восточной Азии, были признаны слишком сложными в использовании, поэтому было решено использовать символы фиксированной ширины. Использование 32-битных символов казалось слишком расточительным, поэтому было решено использовать 16-битные.
Таким образом, первая версия Юникода представляла собой кодировку
с фиксированным размером символа в 16 бит, то есть общее число кодов
было 216 (65 536). Отсюда происходит практика
обозначения символов четырьмя шестнадцатеричными цифрами (например,
U+0410
). При этом в Юникоде планировалось кодировать не
все существующие символы, а только те, которые необходимы в
повседневном обиходе. Редко используемые символы должны были
размещаться в "области пользовательских символов"
(private use area), которая первоначально
занимала коды U+D800...U+F8FF
. Чтобы использовать
Юникод также и в качестве промежуточного звена при преобразовании
разных кодировок друг в друга, в него включили все символы,
представленные во всех наиболее известных кодировках.
В дальнейшем, однако, было принято решение кодировать все символы и в связи с этим значительно расширить кодовую область. Одновременно с этим, коды символов стали рассматриваться не как 16-битные значения, а как абстрактные числа, которые в компьютере могут представляться множеством разных способов (см. Способы представления).
Поскольку в ряде компьютерных систем (например, Windows NT[10]) фиксированные 16-битные символы уже использовались в качестве кодировки по умолчанию, было решено все наиболее важные знаки кодировать только в пределах первых 65 536 позиций (так называемая англ. basic multilingual plane, BMP). Остальное пространство используется для "дополнительных символов" (англ. supplementary characters): систем письма вымерших языков или очень редко используемых китайских иероглифов, математических и музыкальных символов.
Для совместимости со старыми 16-битными системами была изобретена система UTF-16, где первые 65 536 позиций, за исключением позиций из интервала U+D800...U+DFFF, отображаются непосредственно как 16-битные числа, а остальные представляются в виде "суррогатных пар" (первый элемент пары из области U+D800...U+DBFF, второй элемент пары из области U+DC00...U+DFFF). Для суррогатных пар была использована часть кодового пространства (2048 позиций), ранее отведённого для "символов для частного использования".
Поскольку в UTF-16 можно отобразить только 220+216−2048 (1 112 064) символов, то это число и было выбрано в качестве окончательной величины кодового пространства Юникода.
Хотя кодовая область Юникода была расширена за пределы 216 уже в версии 2.0, первые символы в "верхней" области были размещены только в версии 3.1.
Роль этой кодировки в веб-секторе постоянно растёт, на начало 2010 доля веб-сайтов, использующих Юникод, составила около 50 %.[11]
По мере изменения и пополнения таблицы символов системы Юникода и выхода новых версий этой системы, - а эта работа ведётся постоянно, поскольку изначально система Юникод включала только Plane 0 - двухбайтные коды, - выходят и новые документы ISO. Система Юникод существует в общей сложности в следующих версиях:
1.1 (соответствует стандарту ISO/IEC 10646-1:1993), стандарт 1991-1995 годов.
2.0, 2.1 (тот же стандарт ISO/IEC 10646-1:1993 плюс дополнения: "Amendments" с 1-го по 7-е и "Technical Corrigenda" 1 и 2), стандарт 1996 года.
3.0 (стандарт ISO/IEC 10646-1:2000), стандарт 2000 года.
3.2, стандарт 2002 года.
4.0, стандарт 2003.
4.01, стандарт 2004.
4.1, стандарт 2005.
5.0, стандарт 2006.
5.1, стандарт 2008.
5.2, стандарт 2009.
6.0, стандарт 2010.
Хотя формы записи UTF-8 и UTF-32 позволяют кодировать до 231 (2 147 483 648) кодовых позиций, было принято решение использовать лишь 1 112 064 для совместимости с UTF-16. Впрочем, даже и этого более чем достаточно - сегодня (в версии 6.0) используется чуть менее 110 000 кодовых позиций (109 242 графических и 273 прочих символов).
Кодовое пространство разбито на 17 плоскостей по 216 (65536) символов. Нулевая плоскость называется базовой, в ней расположены символы наиболее употребительных письменностей. Первая плоскость используется, в основном, для исторических письменностей, вторая - для редко используемых иероглифов ККЯ, третья зарезервирована для архаичных китайских иероглифов[12]. Плоскости 15 и 16 выделены для частного употребления.[7]
Для обозначения символов Unicode используется запись вида "U+xxxx" (для кодов 0...FFFF), или "U+xxxxx" (для кодов 10000...FFFFF), или "U+xxxxxx" (для кодов 100000...10FFFF), где xxx - шестнадцатеричные цифры. Например, символ "я" (U+044F) имеет код 044F16 = 110310.
Универсальная система кодирования (Юникод) представляет собой набор графических символов и способ их кодирования для компьютерной обработки текстовых данных.
Графические символы - это символы, имеющие видимое изображение. Графическим символам противопоставляются управляющие символы и символы форматирования.
Графические символы включают в себя следующие группы:
буквы, содержащиеся хотя бы в одном из обслуживаемых алфавитов;
цифры;
знаки пунктуации;
специальные знаки (математические, технические, идеограммы и пр.);
разделители.
Юникод - это система для линейного представления текста. Символы, имеющие дополнительные над- или подстрочные элементы, могут быть представлены в виде построенной по определённым правилам последовательности кодов (составной вариант, composite character) или в виде единого символа (монолитный вариант, precomposed character).
Представление символа "Й" (U+0419) в виде базового символа "И" (U+0418) и модифицирующего символа " ̆"(U+0306)
Графические символы в Юникоде подразделяются на протяжённые и непротяжённые (бесширинные). Непротяжённые символы при отображении не занимают места в строке. К ним относятся, в частности, знаки ударения и прочие диакритические знаки. Как протяжённые, так и непротяжённые символы имеют собственные коды. Протяжённые символы иначе называются базовыми (англ. base characters), а непротяжённые - модифицирующими (англ. combining characters); причём последние не могут встречаться самостоятельно. Например, символ "á" может быть представлен как последовательность базового символа "a" (U+0061) и модифицирующего символа " ́" (U+0301) или как монолитный символ "á" (U+00C1).
Особый тип модифицирующих символов - селекторы варианта начертания (англ. variation selectors). Они действуют только на те символы, для которых такие варианты определены. В версии 5.0 варианты начертания определены для ряда математических символов, для символов традиционного монгольского алфавита и для символов монгольского квадратного письма.
Поскольку одни и те же символы можно представить различными кодами, что иногда затрудняет обработку, существуют процессы нормализации, предназначенные для приведения текста к определённому стандартному виду.
В стандарте Юникода определены 4 формы нормализации текста:
Форма нормализации D (NFD) - каноническая декомпозиция. В процессе приведения текста в эту форму все составные символы рекурсивно заменяются на несколько составных, в соответствии с таблицами декомпозиции.
Форма нормализации C (NFC) - каноническая декомпозиция с последующей канонической композицией. Сначала текст приводится к форме D, после чего выполняется каноническая композиция - текст обрабатывается от начала к концу и выполняются следующие правила:
Символ S является начальным, если он имеет нулевой класс модификации в базе символов Юникода.
В любой последовательности символов, стартующей с начального символа S, символ C блокируется от S, если и только если между S и C есть какой-либо символ B, который или является начальным, или имеет одинаковый или больший класс модификации, чем C. Это правило распространяется только на строки, прошедшие каноническую декомпозицию.
Первичным композитом считается символ, у которого есть каноническая декомпозиция в базе символов Юникода (или каноническая декомпозиция для хангыля и он не входит в список исключений).
Символ X может быть первично
совмещён с символом Y, если и только если существует первичный
композит Z, канонически эквивалентный последовательности
Если очередной символ C не блокируется последним встреченным начальным базовым символом L и он может быть успешно первично совмещён с ним, то L заменяется на композит L-C, а C удаляется.
Форма нормализации KD (NFKD) - совместимая декомпозиция. При приведении в эту форму все составные символы заменяются, используя как канонические карты декомпозиции Юникода, так и совместимые карты декомпозиции, после чего результат ставится в каноническом порядке.
Форма нормализации KC (NFKC) - совместимая декомпозиция с последующей канонической композицией.
Термины "композиция" и "декомпозиция" понимают под собой соответственно соединение или разложение символов на составные части.
Исходный текст |
NFD |
NFC |
NFKD |
NFKC |
---|---|---|---|---|
Français |
|
|
|
|
А, Ё, Й |
|
|
|
|
が |
|
|
|
|
Henry IV |
|
|
|
|
Henry Ⅳ |
|
|
|
|
Стандарт Юникод поддерживает письменности языков как с направлением написания слева направо (англ. left-to-right, LTR), так и с написанием справа налево (англ. right-to-left, RTL) - например, арабское и еврейское письмо. В обоих случаях символы хранятся в "естественном" порядке; их отображение с учётом нужного направления письма обеспечивается приложением.
Кроме того, Юникод поддерживает комбинированные тексты, сочетающие фрагменты с разным направлением письма. Данная возможность называется двунаправленность (англ. bidirectional text, BiDi). Некоторые упрощённые обработчики текста (например, в сотовых телефонах) могут поддерживать Юникод, но не иметь поддержки двунаправленности. Все символы Юникода поделены на несколько категорий: пишущиеся слева направо, пишущиеся справа налево, и пишущиеся в любом направлении. Символы последней категории (в основном это знаки пунктуации) при отображении принимают направление окружающего их текста.
Схема базовой плоскости Unicode, см. описание
Юникод включает практически все современные письменности, в том числе:
китайскую (китайские иероглифы активно используются в японском языке, а также достаточно редко в корейском),
японскую (которая включает в себя кроме китайских иероглифов ещё и слоговую азбуку),
и другие.
С академическими целями добавлены многие исторические письменности, в том числе: руны, древнегреческая, египетские иероглифы, клинопись, письменность майя, этрусский алфавит.
В Юникоде представлен широкий набор математических и музыкальных символов, а также пиктограмм.
Однако в Юникод принципиально не включаются логотипы компаний и продуктов, хотя они и встречаются в шрифтах (например, логотип Apple в кодировке MacRoman (0xF0) или логотип Windows в шрифте Wingdings (0xFF)). В юникодовских шрифтах логотипы должны размещаться только в области пользовательских символов.
Консорциум Юникода работает в тесной связи с рабочей группой ISO/IEC/JTC1/SC2/WG2, которая занимается разработкой международного стандарта 10646 (ISO/IEC 10646). Между стандартом Юникода и ISO/IEC 10646 установлена синхронизация, хотя каждый стандарт использует свою терминологию и систему документации.
Сотрудничество Консорциума Юникода с Международной организацией по стандартизации (англ. International Organization for Standardization, ISO) началось в 1991 году. В 1993 году ISO выпустила стандарт DIS 10646.1. Для синхронизации с ним Консорциум утвердил стандарт Юникода версии 1.1, в который были внесены дополнительные символы из DIS 10646.1. В результате значения закодированных символов в Unicode 1.1 и DIS 10646.1 полностью совпали.
В дальнейшем сотрудничество двух организаций продолжилось. В 2000 году стандарт Unicode 3.0 был синхронизирован с ISO/IEC 10646-1:2000. Предстоящая третья версия ISO/IEC 10646 будет синхронизирована с Unicode 4.0. Возможно, эти спецификации даже будут опубликованы как единый стандарт.
Аналогично форматам UTF-16 и UTF-32 в стандарте Юникода, стандарт ISO/IEC 10646 также имеет две основные формы кодирования символов: UCS-2 (2 байта на символ, аналогично UTF-16) и UCS-4 (4 байта на символ, аналогично UTF-32). UCS значит универсальный многооктетный (многобайтовый) кодированный набор символов (англ. universal multiple-octet coded character set). UCS-2 можно считать подмножеством UTF-16 (UTF-16 без суррогатных пар), а UCS-4 является синонимом для UTF-32.
Юникод имеет несколько форм представления (англ. Unicode transformation format, UTF): UTF-8, UTF-16 (UTF-16BE, UTF-16LE) и UTF-32 (UTF-32BE, UTF-32LE). Была разработана также форма представления UTF-7 для передачи по семибитным каналам, но из-за несовместимости с ASCII она не получила распространения и не включена в стандарт. 1 апреля 2005 года были предложены две шуточные формы представления: UTF-9 и UTF-18 (RFC 4042).
В Microsoft Windows NT и основанных на ней системах Windows 2000 и Windows XP в основном используется форма UTF-16LE. В UNIX-подобных операционных системах GNU/Linux, BSD и Mac OS X принята форма UTF-8 для файлов и UTF-32 или UTF-8 для обработки символов в оперативной памяти.
Punycode - другая форма кодирования последовательностей Unicode-символов в так называемые ACE-последовательности, которые состоят только из алфавитно-цифровых символов, как это разрешено в доменных именах.
UTF-8 - представление Юникода, обеспечивающее наилучшую
совместимость со старыми системами, использовавшими 8-битные
символы. Текст, состоящий только из символов с номером меньше 128,
при записи в UTF-8 превращается в обычный текст ASCII.
И наоборот, в тексте UTF-8 любой байт
со значением меньше 128 изображает символ ASCII с тем же кодом.
Остальные символы Юникода изображаются последовательностями длиной
от 2 до 6 байт (на деле, только до 4 байт, поскольку в Юникоде нет
символов с кодом больше 10FFFF, и вводить их в будущем не
планируется), в которых первый байт всегда имеет вид 11xxxxxx
,
а остальные - 10xxxxxx
.
Формат UTF-8 был изобретён 2 сентября 1992 года Кеном Томпсоном и Робом Пайком и реализован в Plan 9[13]. Сейчас стандарт UTF-8 официально закреплён в документах RFC 3629 и ISO/IEC 10646 Annex D.
Символы UTF-8 получаются из Unicode следующим образом:
Unicode UTF-8: 0x00000000 - 0x0000007F: 0xxxxxxx 0x00000080 - 0x000007FF: 110xxxxx 10xxxxxx 0x00000800 - 0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx 0x00010000 - 0x001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
Теоретически возможны, но не включены в стандарт также:
0x00200000 - 0x03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 0x04000000 - 0x7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
Несмотря на то, что UTF-8 позволяет указать один и тот же символ несколькими способами, только наиболее короткий из них правильный. Остальные формы должны отвергаться по соображениям безопасности.
В потоке данных UTF-16 старший байт может записываться либо перед младшим (англ. UTF-16 big-endian), либо после младшего (англ. UTF-16 little-endian). Аналогично существует два варианта четырёхбайтной кодировки - UTF-32BE и UTF-32LE.
Для определения формата представления Юникода в текстовом файле используется приём, по которому в начале текста записывается символ U+FEFF (неразрывный пробел с нулевой шириной), также именуемый меткой порядка байтов (англ. byte order mark, BOM). Этот способ позволяет различать UTF-16LE и UTF-16BE, поскольку символа U+FFFE не существует. Также он иногда применяется для обозначения формата UTF-8, хотя к этому формату и неприменимо понятие порядка байтов. Файлы, следующие этому соглашению, начинаются с таких последовательностей байтов:
К сожалению, этот способ не позволяет надёжно различать UTF-16LE и UTF-32LE, поскольку символ U+0000 допускается Юникодом (хотя реальные тексты редко начинаются с него).
Файлы в кодировках UTF-16 и UTF-32, не содержащие BOM, должны иметь порядок байтов big-endian (unicode.org).
Внедрение Юникода привело к изменению подхода к традиционным 8-битным кодировкам. Если раньше кодировка задавалась шрифтом, то теперь она задаётся таблицей соответствия между данной кодировкой и Юникодом. Фактически 8-битные кодировки превратились в форму представления некоторого подмножества Юникода. Это намного упростило создание программ, которые должны работать с множеством разных кодировок: теперь, чтобы добавить поддержку ещё одной кодировки, надо всего лишь добавить ещё одну таблицу перекодировки в Юникод.
Кроме того, многие форматы данных позволяют вставлять любые символы Юникода, даже если документ записан в старой 8-битной кодировке. Например, в HTML можно использовать коды с амперсандом.
Большинство современных операционных систем в той или иной степени обеспечивают поддержку Юникода.
В операционных системах семейства Windows NT для внутреннего представления имён файлов и других системных строк используется двухбайтовая кодировка UTF-16LE. Системные вызовы, принимающие строковые параметры, существуют в однобайтном и двухбайтном вариантах. Подробнее см. в статье Юникод в операционных системах Microsoft.
UNIX-подобные операционные системы, в том числе GNU/Linux, BSD, Mac OS X, используют для представления Юникода кодировку UTF-8. Большинство программ могут работать с UTF-8 как с традиционными однобайтными кодировками, не обращая внимания на то, что символ представляется как несколько последовательных байт. Для работы с отдельными символами строки обычно перекодируются в UCS-4, так что каждому символу соответствует машинное слово.
Одной из первых успешных коммерческих реализаций Юникода стала среда программирования Java. В ней принципиально отказались от 8-битного представления символов в пользу 16-битного. Сейчас большинство языков программирования поддерживают строки Юникода, хотя их представление может различаться в зависимости от реализации.
Поскольку ни одна раскладка клавиатуры не может позволить вводить все символы Юникода одновременно, от операционных систем и прикладных программ требуется поддержка альтернативных методов ввода произвольных символов Юникода.
Начиная с Windows 2000, служебная программа "Таблица символов" (charmap.exe) показывает все символы в ОС и позволяет копировать их в буфер обмена. Похожая таблица есть, например, в Microsoft Word.
Иногда можно набрать шестнадцатеричный код, нажать Alt+X, и код будет заменён на соответствующий символ, например, в WordPad, Microsoft Word. В редакторах Alt+X выполняет и обратное преобразование.
Во многих программах MS Windows, чтобы получить символ Unicode, нужно при нажатой клавише Alt набрать десятичное значение кода символа на цифровой клавиатуре. Например, полезными при наборе кириллических текстов будут комбинации Alt+0171 (") и Alt+0187 ("). Интересна также комбинация Alt+0133 (...).
В Mac OS 8.5 и более поздних версиях поддерживается метод ввода, называемый "Unicode Hex Input". При зажатой клавише Option требуется набрать четырёхзначный шестнадцатеричный код требуемого символа. Этот метод позволяет вводить символы с кодами, большими U+FFFF, используя пары суррогатов; такие пары операционной системой будут автоматически заменены на одиночные символы. Этот метод ввода перед использованием нужно активизировать в соответствующем разделе системных настроек и затем выбрать как текущий метод ввода в меню клавиатуры.
Начиная с Mac OS X 10.2, существует также приложение "Character Palette", позволяющее выбирать символы из таблицы, в которой можно выделять символы определённого блока или символы, поддерживаемые конкретным шрифтом.
В GNOME также есть утилита "Таблица символов", позволяющая отображать символы определённого блока или системы письма и предоставляющая возможность поиска по названию или описанию символа. Когда код нужного символа известен, его можно ввести в соответствии со стандартом ISO 14755: при зажатых клавишах Ctrl и Shift ввести шестнадцатеричный код (начиная с некоторой версии GTK+ ввод кода нужно предварить нажатием клавиши "U"). Вводимый шестнадцатеричный код может иметь до 32 бит в длину, позволяя вводить любые символы Юникода без использования суррогатных пар.
Все приложения X Window, включая GNOME и KDE, поддерживают ввод при помощи клавиши Compose. Для клавиатур, на которых нет отдельной клавиши Compose, для этой цели можно назначить любую клавишу - например, Caps Lock.
Консоль GNU/Linux также допускает ввод символа Юникода по его коду - для этого десятичный код символа нужно ввести цифрами расширенного блока клавиатуры при зажатой клавише Alt. Можно вводить символы и по их шестнадцатеричному коду: для этого нужно зажать клавишу AltGr, и для ввода цифр A-F использовать клавиши расширенного блока клавиатуры от NumLock до Enter (по часовой стрелке). Поддерживается также и ввод в соответствии с ISO 14755. Для того чтобы перечисленные способы могли работать, нужно включить в консоли режим Юникода вызовом unicode_start(1) и выбрать подходящий шрифт вызовом setfont(8).
Mozilla Firefox для GNU/Linux поддерживает ввод символов по ISO 14755.
В Юникоде английское "a" и польское "a" - один и тот же символ. Точно так же одним символом (но отличающимся от "a" латинского) считаются русское "а" и сербское "а". Такой принцип кодирования не универсален; по-видимому, решения "на все случаи жизни" вообще не может существовать.
Тексты на китайском, корейском и японском языке имеют традиционное написание сверху вниз, начиная с правого верхнего угла. Переключение горизонтального и вертикального написания для этих языков не предусмотрено в Юникоде - это должно осуществляться средствами языков разметки или внутренними механизмами текстовых процессоров.
Юникод предусматривает возможность разных начертаний одного и того же символа в зависимости от языка. Так, китайские иероглифы могут иметь разные начертания в китайском, японском (кандзи) и корейском (ханчча), но при этом в Юникоде обозначаться одним и тем же символом (так называемая CJK-унификация), хотя упрощённые и полные иероглифы всё же имеют разные коды. Часто возникают накладки, когда, например, японский текст выглядит "по-китайски". Аналогично, русский и сербский языки используют разное начертание курсивных букв п и т (в сербском они выглядят как и и ш, см. сербский курсив). Поэтому нужно следить, чтобы текст всегда был правильно помечен как относящийся к тому или другому языку.
Перевод из строчных букв в заглавные тоже зависит от языка. Например: в турецком существуют буквы İi и Iı - таким образом, турецкие правила изменения регистра конфликтуют с английскими, которые предписывают "i" переводить в "I". Подобные проблемы есть и в других языках - например, в канадском диалекте французского языка регистр переводится немного не так, как во Франции.[14]
Даже с арабскими цифрами есть определённые типографские тонкости: цифры бывают "прописными" и "строчными", пропорциональными и моноширинными[15] - для Юникода разницы между ними нет. Подобные нюансы остаются за программным обеспечением.
Некоторые недостатки связаны не с самим Юникодом, а с возможностями обработчиков текста.
Файлы с текстом в Юникоде занимают больше места в памяти, так как один символ кодируется не одним байтом, как в различных национальных кодировках, а последовательностью байтов (исключение составляет UTF-8 для языков, алфавит которых укладывается в ASCII, а также наличие в тексте символов двух и более языков, алфавит которых не укладывается в ASCII[16]). Файл шрифта, необходимый для отображения всех символов таблицы Юникод, занимает сравнительно много места в памяти и требует бо́льших вычислительных ресурсов[17]. С увеличением мощности компьютерных систем и удешевлением памяти и дискового пространства эта проблема становится всё менее существенной; тем не менее, она остаётся и в ближайшем будущем останется актуальной для портативных устройств, например, для мобильного телефона[18].
Хотя поддержка Юникода реализована в наиболее распространённых операционных системах, до сих пор не всё прикладное программное обеспечение поддерживает корректную работу с ним. В частности, не всегда обрабатываются метки BOM и плохо поддерживаются диакритические символы. Проблема является временной и есть следствие сравнительной новизны стандартов Юникода (в сравнении с однобайтовыми национальными кодировками).
Производительность некоторых программ снижается при использовании Юникода вместо однобайтовых кодировок.
Философия UNIX (перенаправление ввода-вывода из одной программы в другую) неявно подразумевает, что минимальная единица ввода-вывода - байт - совпадает с одним символом текста. Поэтому UNIX-подобные ОС перешли на Unicode относительно поздно - и то в виде UTF-8.
Первоначальная версия Юникода предполагала наличие большого количества готовых символов, в последующем было отдано предпочтение сочетанию букв с диакритическими модифицирующими знаками (англ. combining diacritics). Например, русские буквы Ё (U+0401) и Й (U+0419) существуют в виде монолитных символов, хотя могут быть представлены и набором базового символа с последующим диакритическим знаком, то есть в составной форме (англ. decomposed): Е+ ̈ (U+0415 U+0308), И+ ̆ (U+0418 U+0306).
В то же время множество символов из языков с алфавитами на основе кириллицы не имеют монолитных форм.
Наконец, некоторые редкие системы письма всё ещё не представлены должным образом в Юникоде. Изображение "длинных" надстрочных символов, простирающихся над несколькими буквами, как, например, в церковнославянском языке, пока не реализовано.
"Unicode" - одновременно и имя собственное (или часть имени, например, Unicode Consortium), и имя нарицательное, происходящее из английского языка.
На первый взгляд предпочтительнее использовать написание "Уникод". В русском языке уже есть морфемы "уни-" (слова с латинским элементом "uni-" традиционно переводились и писались через "уни-": универсальный, униполярный, унификация, униформа) и "код". Напротив, торговые марки, заимствованные из английского языка, обычно передаются посредством практической транскрипции, в которой деэтимологизированное сочетание букв "uni-" записывается в виде "юни-" ("Юнилевер", "Юникс" и т. п.), то есть точно так же, как в случае с побуквенными сокращениями, вроде UNICEF "United Nations International Children"s Emergency Fund" - ЮНИСЕФ.
Написание "Юникод" уже твёрдо вошло в русскоязычные тексты. Согласно "Яндексу", частота использования этого слова примерно в 10 раз превышает "Уникод"[19]. В Википедии используется более распространённый вариант.
На сайте Консорциума есть специальная страница, где рассматриваются проблемы передачи слова "Unicode" в различных языках и системах письма. Для русской кириллицы указан вариант "Юникод"[1].
Формы, принятые иностранными организациями для русской передачи слова "Unicode", являются рекомендательными.
Необходим перепост. Газета "Компьютерные вести",
kv.by/index2010133801.htm
Издание 3-е, исправленное и дополненное. Другие статьи (оглавление)
Автор хотел бы обсудить некоторые недостатки текущей версии юникод и обсудить дальнейшие пути его совершенствования. Проблема на наш взгляд состоит в том, что unicode.org не систематизировала результаты своей работы (с чем она согласилась в процессе переписки unicode.org/cgi-bin/swish-uml-cgi.pl?query=Dmitry%20Turin&sort=sent), в результате чего не одна компьютерная индустрия понесла потери. Если просуммировать - масштабы будут очень велики.
Во всех программах - поисковых серверах, базах данных, CAD-системах, текстовых редакторах - необходимо искать слова и сравнивать варианты написания слова: все буквы строчные, первая буква прописная, все прописные буквы. Кроме того, пользователь иногда пишет в строке поиска с ошибками или озаглавливает искомый объект с ошибками - одна лишняя буква, одной буквы не хватает, одна буква изменена. Если в кодировке прописную букву обозначать строчной с дополнительным байтом впереди, то сравнение вариантов написания сводится к поиску с опечаткой, а значит один алгоритм можно уже не реализовывать. К тому же освободится половина мест в таблице кодировки, можно разместить больше символов (ISO уже застолбила стандарт 4-байтной кодировки под названием ISO 10646). Префиксным байтом можно маркировать имена собственные и аббревиатуры на языках без прописных букв, что в дальнейшем поможет поисковым серверам. На степени архивации текста нововведение никак не сказывается. В деталях оно выглядит следующим образом.
В тех случаях, когда встречается имя собственное или начало предложения, поставить один префиксный байт перед словом (будем условно изображать его как ), чтобы указать, что следующая за ним буква прописная (anna → Anna). Назовем этот префиксный байт знаком "имя собственное". Аналогично для аббревиатур, достаточно одного префиксного байта перед словом, чтобы указать, что все буквы до следующего пробела прописные (uno → UNO). Назовем этот байт знаком "аббревиатура". Пользователь по-прежнему ставит префиксы сам, нажимая клавиши "Shift" и "Caps Lock".
На взгляд автора международная организация поступила очень недальновидно, выбрав расточительное кодирование. И повторила распространенное заблуждение, отождествив обозначение букв кодировку) и их графическое изображение (шрифт). Это совсем разные вещи.
Индексы прочно вошли в нашу жизнь: без них невозможно такое социальное явление, как наука - разумеется, без них немыслима такая всеохватывающая индустрия, как программирование. Поражает убогий, пещерный способ записи индексов в текстовых файлах - с помощью квадратных скобок. Он заставляет нас воссоздавать математические записи в своем воображении. Поднимая вопрос на принципиальную высоту, то же самое нужно сказать о пределах интегрирования и суммирования. Мы могли бы видеть индексы и пределы "на своих местах" в обыкновенных текстовых файлах, а не только в системах типа MathCAD, если бы у нас была разумная кодировка для них. Например, такая.
Пусть база - надпись, для которой индексы и пределы записываются, индексы и пределы вместе назовем довесками, и пусть управляющие символы , , , обозначают, что с них начинаются нижний предел, верхний предел, нижний индекс, верхний индекс. Между базой, управляющими символами и довесками нет никаких пробелов, и вместе они составляют одно слово. У пределов бывают индексы, у индексов - субиндексы. Будем использовать управляющие символы как вложенные открывающие скобки, а не предварять довесок таким их количеством подряд, на каком уровне вложенности довесок находится. Однако чтобы вернуться на один уровень вложенности назад, потребуется еще один управляющий символ "возврат" . Таким образом слово ai j отображается как , слово ai j - как , а числа можно записывать в виде -3.71*10-14. На клавиатуре потребуются 5 новых клавиш, или их роль должны выполнять функциональные клавиши.
Также убого выглядит невозможность записать в текстовом файле общеупотребительные формулы с корнем, дробью, интегралами и фигурными скобками. А ведь все эти символы в таблице кодировки есть, но конформизм не позволяет проинтерпретировать их как управляющие. Неоднозначность только в том, какой символ - слэш или обратный слэш - использовать для обозначения дроби. Символ слэш оставим - вдруг кому-то захочется созерцать скрытую красоту выражений 1/2 или 3/4 - и обратимся вместо него к символу обратный слэш. Таким образом выражение (a+b+c)\(d+e) должно отображаться как , а выражение (a+b)(c+d)- как . Такие конструкции легко рисуют все математические программы, и виртуозно опознают, на какое из слагаемых пользователь передвинул курсор стрелками на клавиатуре или мышью. Еще проще поведение трех пар скобок и двух интегралов (простого и кругового ) - открывающие скобки и интегралы равны по высоте следующему за ними выражению, закрывающие скобки - предшествующему.
Существует два принципиально разных вида диакритических знаков. Первые - будем называть их диакритическими некомпактами - входят в состав буквы и являются ее неотъемлемой частью, примерами чего являются все буквы латинского, кириллического, а также согласные арабского алфавитов. Вторые - будем называть их диакритическими буквами - обозначают отдельную букву, примерами чего являются все гласные индо-арийских, дравидийских, арабского, еврейского алфавитов. В этих языках не горизонтальное и не вертикальное направление письма, а чередующееся (следующая буква может быть как над или под предыдущей, так и после), и только фильтр в голове не позволяет это увидеть.
Кодирование двух букв - обычной и диакритической - в любом случае потребует двух байт. Если кодировать обычные и диакритические буквы по-отдельности и отображать последние не в следующем знако-месте, а в предыдущем путем операции "or" с ним, то редактирование одной буквы слога не потребует замены кода другой буквы, т.е. не потребует замены кода всего слога целиком. Операция "or" выполняется с одним и тем же знакоместом для всех подряд идущих диакритических букв (см. примечание для индо-арийских алфавитов на computer20.euro.ru/ru/ar.htm). Представляется, что международная организация unicode.org поступила нерачительно, даже не попытавшись свести многомерную задачу к одномерной.
В Индии существует множество родственных индо-арийских языков. У них очень разные алфавиты. Можно было бы обычные и диакритические буквы (или слога) разных языков, обозначающие один и тот же звук, кодировать одинаково (computer20.euro.ru/ru/i.htm), а для придания начертания, соответствующего тому или иному языку, добавлять перед текстом два байта - управляющий символ и номер языка. Тогда житель Индии, не знающий алфавита своего соседа, мог бы прочитать сообщение на своем алфавите (звучало бы оно наверное также, как для русского, читающего на беларусском или украинском), не перекодируя весь текст, а только изменив один байт - номер языка. Одного байта на идентификатор языка хватит - на планете используется только 67 алфавитов.
Аналогично, в Индии существует множество родственных дравидийских народов. И у них тоже сильно отличающиеся алфавиты. И их тексты также можно было бы перекодировать, изменяя только один байт. А чтобы не увеличивать количество идентификаторов языка, коды букв дравидийского алфавита могли бы продолжать коды букв индо-арийского. Для удобства запоминания идентификаторов, пусть они обозначают алфавиты по часовой стрелке в порядке следования по окружностям на географической карте (computer20.euro.ru/ru/m.htm): малаялам - каннара - телугу - тамильский, деванагари - гуджаратский - гурмукхи - ассамский - бенгальский - ория - сингальский.
Номер языка мог бы нести дополнительную функцию. Для индо-арийских, дравидийских и еврейского алфавитов - включать механизм отображения диакритических букв (см. под-заголовок в этой статье "Два вида диакритических знаков"). Для арабского (computer20.euro.ru/ru/a.htm) - переводить курсор на новую строку, включать отображение букв справа налево (слова не нужно было бы выравнивать по правому краю в языке разметки текста или в проприетарным формате файла), выбор нужного варианта начертания буквы в зависимости от положения (вначале слова, в середине, в конце, в изолированном состоянии), а также специфическое не-европейское начертание цифр и трех знаков пунктуации (запятая, точка с запятой, вопросительный знак). Для корейского - включать алгоритм упаковки букв в иероглифы по часовой стрелке. Ну, и в связи с нашим предложением выше о кодировании прописных букв, номер языка мог бы включать интерпретацию управляющих символов "имя собственное" и "аббревиатура" для латинницы, кириллицы, греческого и армянского. Будем называть далее все печатные символы, приходящиеся на один и тот же идентификатор языка, страницей.
Две сотни символов той страницы, которая выбирается автоматически, если не указана в начале текста, желательно отдать под знаки, обслуживающие переписку наибольшего количества людей на земле. А не кодировать некоторые из таких языков (в т.ч. русский) двумя байтами, как в UTF-8. Экономия локальных накопителей информации и международного трафика очевидна. В одну страницу вполне влезают латинница, кириллица и греческий. Расположение этих букв и рассмотрим.
Латинницу (103 буквы которой можно увидеть в Большой Советсткой Энциклопедии или на computer20.euro.ru/ru/ul.htm) и кириллицу (89 букв, также в БСЭ или на computer20.euro.ru/ru/uc.htm) внесем в кодировку целиком (а не многократно в виде своих подмножеств). Также чтобы избежать дублирований постараемся выбросить из кириллицы символы, повторяющие символы латинницы, и разместить оставшиеся посреди латинницы, не нарушая порядок сортировки. Примем компромиссы. Первый, буквы 'c' и 'l' (а также вариант первой с диакретиком) расположены в латиннице в начале, а в кириллице в конце, выбрасывание их в одном слишком бы нарушило сортировку в другом, поэтому расположим буквы дважды. Второй, четверть букв 'a' (три штуки) можно расположить один раз, сохраняя сортировку только в одном из алфавитов - расположим один раз и сохраним в латинском, т.к. все три буквы с диакретиками: на нерусских языках публичные базы данных находятся в зачаточном состоянии, и к порядку букв в них еще никто не привык (а на случай, если бы такая привычка уже возникла, участки расположения всех букв 'a' в обоих алфавитах одинаковы, и использование латинского порядка только для трех из них не обнаружится при поиске слова на основе минимального количества перестановок букв). Итого 177 букв, computer20.euro.ru/ru/u.htm.
Объединенный Латинско-Кириллический Алфавит по Д.Тюрину
Тюрин Дмитрий, sql50@narod.ru
Букву 'o' удалим из греческого, часть алфавита до нее (14 букв) разместим перед латинско-кириллическим, а часть (9 букв) - после. Начертание буквы "сигма" пусть зависит от настроек ОС, вместо того, чтобы присутствовать этой букве в двух местах алфавита - как уже было сказано, не надо путать кодировку и шрифт, кодировка должна быть одна для всех начертаний, обозначающих одну и ту же букву.
Математические символы и спец-символы расположим не на той же странице, где алфавит науки (греческий), а на отдельной странице, т.к. их количество будет все время увеличиваться, и неизвестно, какие же из них будут в разные моменты времени наиболее употребительными.
На каждой странице и в одних и тех же местах расположены цифры; знаки припинания; в т.ч. спецсимвол для обозначения ударений, отличный от диакретиков; знаки арифметических операций; скобки; управляющие символы, чтобы не переключать страницы только из-за этих символов при переписке на одном алфавите. Каждое из этих подмножеств не перемежается с другими, чтобы можно было определять принадлежность символа к подмножеству всего двумя операциями сравнения (для верхней и нижней границ). Исключения составляют, с одной стороны, знаки "имя собственное" и "аббревиатура", с другой - "перевернутые" восклицательный и вопросительный знаки. Первые существуют только на латинско-кириллико-греческой и армянской страницах; а перевернутые знаки, встречающиеся только в испанском и к тому же одновременно с нормальными, существуют только на латинско-кириллико-греческой странице.
И будем использовать два символа-переключателя страницы подряд для перехода на двухбайтную кодировку - для иероглифов и букв, перемежающихся с иероглифами, т.е. кроме хираганы и катаканы в двухбайтной кодировке закодированы еще раз корейский и латинница (смесь последней с иероглифами встречается во вьетнамском). Разумеется, в двухбайтной кодировке какой-то символ должен переключать назад в однобайтную.
Давайте посмотрим правде в глаза - текст не обходится без разметки. То там нужно жирностью выделить, то здесь нужно гипер-ссылку поставить. Однако ни один из многочисленных языков разметки или проприетарных форматов файлов невозможно скормить видео-карте непосредственно, что ложится лишней головной болью и ОС, и на ПО, и не везде можно эти языки и проприетарные форматы применить. Предлагаю для цвета, наклона, подчеркивания, размера шрифта и жирности как для действительно используемых ввести обозначение прямо в текстовом файле. Давайте перестанем сопротивляться и примем необходимое (а не "всё", как боятся некоторые самозабвенные критики). Пояснения требует разве что изменение размера шрифта посреди текста. Есть такое понятие - агрессивный пейзаж. Это - длинная повторяющаяся последовательность, например, одинаково окрашенные окна на однотонной стене (вы заметили, строители разукрашивают стены как матрешки?), или череда гипер-ссылок шрифтом одного размера. Да-да, именно поэтому вы периодически встречаете сайты, на которых куча ссылок дана шрифтами разного размера - чтобы глаз имел опорные знаки внутри этого участка текста.
Перед выделяемой фразой разместим управляющие символы "начало фракции" и "середина фракции" , а после нее - символ "конец фракции" . Между первыми двумя управляющими символами находятся байт-предсказатель и (опционально) фракционная запись. В байте-предсказателе используются семь бит, первые три из которых указывают, какие поля присутствуют во фракционной записи (если все три бита равны нулю, значит длина фракционной записи равна нулю, т.е. ее нет совсем). А содержать она может целочисленные цвет, размер шрифта и некоторый идентификатор, которым метится данный участок текста (этот идентификатор выполняет ту же роль, что и якорь HTML, и сообщается видеокартой программному обеспечению, когда пользователь кликает на фразу). Последние четыре бита байта-предсказателя указывают, что фраза подчеркнута, жирная, наклонная или имеет тень. Условимся участок текста от символа "начало фракции" до символа "конец фракции" называть фракцией, и договоримся, что фракции не могут быть вложенными - для упрощения аппаратуры, отображающей текст.
Дмитрий Тюрин, DmitryTurin.narod.ru
|
Новые книги авторов СИ, вышедшие из печати:
О.Болдырева "Крадуш. Чужие души"
М.Николаев "Вторжение на Землю"