Ansi 1251: Кодировка ANSI и windows-1251 одно и то же? — Хабр Q&A

Содержание

Создание русского текста в графических редакторах Скретч

Программа, описанная ниже, расположена по адресу: code/Cyrillic text converter for paint editor.sb2

Графический редактор Скретч обладает неприятной особенностью — в нём нельзя набирать русские буквы. Можно, конечно, готовить картинки с русскими буквами в других графических редакторах.

Если это растровый редактор, то на маленьком экране 480×360 всё хорошо, но при переключении на полный экран начинаются неприятности — растровый текст приходит в негодность:

Искажений не будет, если создавать текст в векторном редакторе. Но в векторном редакторе Скретч (как и в растровом) русские буквы не набираются.

В других векторных редакторах, например, Inkscape, таких проблем нет, но векторный редактор хранит не глифы, а название шрифта и номер символа в нём.

Когда такой векторный текст загружается в Скретч (как костюм или фон), то вместо русских букв видим, увы, кракобяки.

Есть ли решения этой проблемы?

Есть интересный Скретч-проект, который позволяет в редакторе Скретч записывать русские буквы рубленым шрифтом Helvetica. Вот ссылка на этот проект (автор обозначен как stickfire-test):

Cyrillic text converter for paint editor

Как это работает

Если посмотреть на код этого проекта, становится понятно, что на самом деле русские буквы в шрифте Helvetica есть, но они не на тех местах, где надо (в смысле привычной кодировки Windows ANSI 1251)!

В шрифте Helvetica, который подключен к Скретч, используется кодировка

ANSI 1252, в то время как мы пишем тексты в кодировке ANSI 1251. Места английских букв, цифр и спецсимволов в этих кодировках совпадают, а русские буквы расположены на разных местах.

Получается, что если мы пишем по-русски в ANSI 1251, то в ANSI 1252 этот будут кракобяки. И наоборот, если мы пишем в ANSI 1251 правильными кракобяками, то в ANSI 1252 будут получаться русские буквы. Собственно, на этом и основана программа, ссылку на которую приводится выше.

Программа делает следующее:

  1. Запрашивает у пользователя ввод текста.
  2. Перекодирует этот текст из ANSI 1251 в ANSI 1252
    при помощи списка characters, который содержит нужные кракобяки на месте русских букв:
  3. Показывает перекодированный текст на экране:
  4. Этот текст копируется через буфер обмена и переносится в векторный графический редактор Скретч:
  5. Наконец результат сохраняется в виде файла с векторной картинкой:

Программа написана неоправданно хитро. Проще было бы всё это устроить так.

Создать два списка, один с русскими буквами, а второй с нужными кракобяками (этот список в программе есть и называется characters).

Далее перекодируем посимвольно так: ищем в первом списке очередную русскую букву, затем заменяем её на кракобяку из списка

characters, расположенную на том же месте (имеющую тот же индекс), что и найденная русская буква. Всё.

Авторы программы лCyrillic text converter for paint editor назвали свою процедуру перекодировки fast convert, то есть лбыстрое конвертирование. За счёт хитрости с именами многочисленных фонов, процедура работает быстро, без поиска вообще, как хеш-таблица. Но если использовать бинарный поиск, он не будет тормозить работу. Для поиска одного символа в таблице с русскими буквами потребуется не более 7 проверок. Интересно было бы это реализовать этот алгоритм! Попробуйте!

Рассмотрим подробнее хитрый хеш-алгоритм от

stickfire-test:

Пояснения к этому коду

Фишка 1

Название фона соответствует русской букве, а номер фона — номеру кракобяки в списке characters. Никаких картинок фоны не содержат. Важны имена и номера фонов. Фактически, имена и номера используются как хеш-таблица.

Фон устанавливается по имени, а в качестве имени используется очередная русская буква из конвертируемого текста.

Дополнительная хитрость: сначала устанавливается фон для пробела, потом для заглавной буквы, потом для маленькой. Скретч не позволяет называть фоны одинаковыми буквами в разных регистрах, поэтому для маленьких букв дополнительно к букве приписывается диез (решётка #). То есть для заглавной буквы А, например, имеется фон с именем А и номером 2, а фон, соответствующий маленькой букве

а имеет имя а# и номер 34.

Из этих трёх команд смены фона реально сработает только одна, та, у которой указано существующее имя фона.

Фишка 2

Вместо русской буквы берётся кракобяка из списка characters по номеру фона. Номер фона работает как индекс в списке characters.

#3992 (Incorrect display in Solaris encoding 1251) – Midnight Commander

Opened 4 years ago

Last modified 4 years ago

Incorrect display in Solaris encoding 1251

Reported by: shurik005Owned by: andrew_b
Priority: minor Milestone: 4.8.24
Component: mc-core Version: master
Keywords: solaris, codepage, ansi1251 Cc:
Blocked By: Blocking:
Branch state: merged Votes for changeset: committed-master

Solaris uses the ANSI1251 encoding name than other systems, where CP1251 is usually.

As a result, Cyrillic characters are replaced with questions when using this encoding, since mc switches to 7-bit ASCII. When str_8bit_encodings are added to the list of the values «ansi-1251», «ansi1251» in the file lib/strutil/strutil.c, everything displays correctly, but in Options/Display?? Bits are also defined by the Input / display codepage 7-bit ASCII, unlike other encodings.

root@test:~# LC_MESSAGES=C mc -F
Home directory: /root
Profile root directory: /root
[System data]
    Config directory: /usr/share/mc/
    Data directory:   /usr/share/mc/
    File extension handlers: /usr/share/mc/ext.d/
    VFS plugins and scripts: /usr/share/mc/
        extfs.d:        /usr/share/mc/extfs.d/
        fish:           /usr/share/mc/fish/
[User data]
    Config directory: /root/.config/mc/
    Data directory:   /root/.local/share/mc/
        skins:          /root/.local/share/mc/skins/
        extfs.d:        /root/.local/share/mc/extfs.d/
        fish:           /root/.local/share/mc/fish/
        mcedit macros:  /root/.
local/share/mc/mc.macros mcedit external macros: /root/.local/share/mc/mcedit/macros.d/macro.* Cache directory: /root/.cache/mc/ root@test:~# mc --configure-options '--prefix=/usr' '--sysconfdir=/usr/share' '--libexec=/usr/share' 'CFLAGS=-m32' 'LDFLAGS=-m32' 'CPPFLAGS=-m32'

Change History

comment:1 follow-up: ↓ 2 Changed 4 years ago by andrew_b

comment:2 in reply to: ↑ 1 ; follow-up: ↓ 4 Changed 4 years ago by shurik005

  • Summary changed from Некоррекное отображение в Solaris кодировки 1251 to Incorrect display in Solaris encoding 1251

comment:3 Changed 4 years ago by andrew_b

  • Description modified (diff)

comment:4 in reply to: ↑ 2 ; follow-up: ↓ 5 Changed 4 years ago by andrew_b

Last edited 4 years ago by andrew_b (previous) (diff)

comment:5 in reply to: ↑ 4 ; follow-up: ↓ 6 Changed 4 years ago by shurik005

comment:6 in reply to: ↑ 5 Changed 4 years ago by shurik005

comment:7 follow-up: ↓ 8 Changed 4 years ago by andrew_b

  • Status changed from new to accepted
  • Owner set to andrew_b
  • Branch state changed from no branch to on review
  • Milestone changed from Future Releases to 4. 8.24

comment:8 in reply to: ↑ 7 ; follow-up: ↓ 9 Changed 4 years ago by shurik005

comment:9 in reply to: ↑ 8 Changed 4 years ago by andrew_b

Last edited 4 years ago by andrew_b (previous) (diff)

comment:10 follow-up: ↓ 11 Changed 4 years ago by shurik005

comment:11 in reply to: ↑ 10 Changed 4 years ago by andrew_b

comment:12 Changed 4 years ago by shurik005

comment:13 Changed 4 years ago by andrew_b

  • Votes for changeset set to shurik005 andrew_b
  • Branch state changed from on review to approved

comment:14 Changed 4 years ago by andrew_b

  • Status changed from accepted to testing
  • Votes for changeset changed from shurik005 andrew_b to committed-master
  • Resolution set to fixed
  • Branch state changed from approved to merged

comment:15 Changed 4 years ago by andrew_b

  • Status changed from testing to closed

comment:16 Changed 4 years ago by andrew_b

Note: See TracTickets for help on using tickets.

ANSI/AHRI 1251-SI-2014 — Рейтинг производительности холодильных и морозильных камер с исправлениями

ANSI/AHRI 1251-SI-2014 — Рейтинг производительности холодильных и морозильных камер с исправлениями