Перекодировка и обработка строк: от 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)