Перекодировка и обработка строк: от ASCII к ANCI/DBCS и Unicode

Автор: Овчинникова А.А., Толоконцева А.С., Валагов Д.А.

Журнал: Теория и практика современной науки @modern-j

Рубрика: Основной раздел

Статья в выпуске: 9 (27), 2017 года.

Бесплатный доступ

В данной статье рассмотрено появление таблиц кодировок; переход к новым таблицам, соответствующим современным запросам; примеры таблиц кодировок.

Кодирование, набор символов, таблица

Короткий адрес: https://sciup.org/140272184

IDR: 140272184

Текст научной статьи Перекодировка и обработка строк: от ASCII к ANCI/DBCS и Unicode

Задача оптимальной кодировки символов, берет свое начало с создания телеграфа,    где    применялось 4-х битовое    шифрование. 5-й разряд на перфоленте был контрольным. Затем, чтобы перейти от одного набора символов к другому, использовали особые символы «смены регистра». На смену этому шифру пришел 7-битовый (8-й контрольный), который позволял умещаться одному языку (русскому или английскому) полностью. Он положил основу системе ASCII (American Standard Code for Information Interchange) еще до разработки современных компьютеров.

В конце 60-х годов произошел переход на «байтовый» принцип хранения информации, но в тоже время в компьютерной технике еще долго использовался 7-разрядный код.

По результатам «локализации» ПО для зарубежных стран (СССР в частности) проблема решалась заменой нижнего регистра английского алфавита. Следственно, до конца 80-х годов советские программисты могли работать только с верхним регистром русского и английского алфавита.

Переход к системе ANSI (American National Standards Institute) и DBCS (Double-Byte Character Set) стал решением проблемы, связанной с использованием иностранных языков. ANSI и сегодня является в наибольшей степени популярным символьным стандартом для ПК, в котором используется 8-битовое кодирование (до 256 кодов). Его основой является традиционная (основная) таблица ASCII (0—127), дополненная еще 128 символами, которые иногда называют «расширенной» таблицей ASCII. По этой причине ANSI нередко называют расширенным вариантом ASCII (или даже ассоциируют с ASCII, что в действительности не совсем правильно).

Часто применяется ANSI для европейских языков, основанных на классическом латинском алфавите, которые могут иметь дополнительные символы или видоизмененные буквы по типу «A с точкой», «I с двумя точками» и прочее.

В свою очередь в дополнительный набор символов смогла вместиться и кириллица (русский язык), но с кое-какими проблемами. Оказывается, что многие коды из состава таблицы 128-255 уже были использованы (без соответствующей стандартизации) в ряде программ. В качестве классических примеров можно вспомнить русскую «р», которую не признавал Norton Commander 3.0 для DOS, или FoxBase, который считал русскую «Н» переводом строки.

Довольно много было подобных случаев «наследия» из прошлого и именно этим во многом объясняется наличие «панъевропейских версий» Windows до 95 включительно. Использование таких не стандартизированных спецсимволов требовало специальной коррекции кода.

В прочем, многим языкам (в основном азиатским) 128 дополнительных символов не хватало. Благодаря этому появляется систему DBCS, которая строится по другому принципу. Для латинских букв она использует кодировку ASCII (0—127), плюс для своих собственных символов (японский набор включает около 12 тыс. символов) она использует двухбайтовый набор, когда первый код (128—255) выполняет функцию упреждающего, а следующий является его дополнением. Легко посчитать, что такая кодировка позволяет использовать 32K+128 символов.

UniCode — это схема кодирования символов, которая использует на каждый символ два байта: первый байт определяет номер набора символов, второй — собственно код символа. Например, набор символов английского и западноевропейских языков (cp1252) имеет код первого байта 0, восточноевропейских (cp1250) — 1, русского (кириллица, cp1251) — 4.

Международная организация по стандартизации продвигает UniCode , как универсальный единый стандарт. Программное обеспечение переживает трудный переход от ANSI/DBCS к Unicode, потому что приходится использовать смешанные варианты кодировки из-за огромного информационного наследия. В частности, это в большинстве своем определяет значительный беспорядок с преобразованием кодов символов (можно рассмотреть на примере VB).

Типичным примером является Microsoft Windows 9x, ядро и WinAPI которой по-прежнему используют кодировку ANSI/DBCS. Однако многие ее компоненты, а также автономные приложения (в частности, VB и Office) применяют Unicode (см. таблицу 1 ).

Несмотря на то, что, хотя Unicode и DBCS имеют двухбайтовые символы и покрывают набор символов примерно одного объема, их схемы кодирования совершенно различны. На взгляд программиста важным различием является то, что ANSI использует только один байт на символ,

Unicode – строго два байта, а DBCS – 1-2 байта, в зависимости от используемых символом.

Более того, популярной проблемой русского языка является наличие нескольких однобайтовых кодировок символов. Собственно, ANSI кодировкой для кириллицы является таблица Windows cp1251.

16-битный код

Символы

16-битный код

Символы

0000-007F

ASCII

0300-U36F

Общие

диакритические

0080-00FF

Символы Latin 1

0400-04FF

Кириллица

0100-017F

Европейские латинские

0530-058F

Армянский

01 80-01FF

Расширенные латинские

0590-05FF

Еврейский

0250-02AF

Стандартные фонетические

0600-06FF

Арабский

02BO-02FF

Модифицированные литеры

0900-097F

Деванагари

Таблица 1

Unicode: UTF-8, UTF-16, UTF-32

Unicode является набором графическим символов и способом их кодирования для обработки компьютером текстовой информации.

Unicode не только назначает каждому символу уникальный код, но и определяет различные параметры этого символа, например:

  • -    тип символа (прописная буква, строчная буква, цифра, знак препинания и т.д.);

  • -    принадлежность символа (отображение слева направо или справа налево, пробел, разрыв строки и т.д.);

  • -    соответствующая прописная или строчная буква (для строчных и прописных букв соответственно);

  • -    соответствующее числовое значение (для цифровых символов).

Узнать числовое значение символа возможно с помощью различных сайтов с таблицами Unicode или сайтами конверторами текста.

Список литературы Перекодировка и обработка строк: от ASCII к ANCI/DBCS и Unicode

  • http://fontproblem.narod.ru/index.html?http://fontproblem.narod.ru/crosref/from_ASCII_to_Unicode.htm (дата обращения 17.09.2017)
  • https://wiki.dieg.info/unicode (дата обращения 17.09.2017)
Статья научная