@flexpc

Преобразование шрифта?

ᴄᴀʍоᴇ боᴧьɯоᴇ ʍоᴩᴇ
я имею вот такой шрифт, но большинство ресурсов и языков с такими символами работать не умеет.
подскажите способ, как конвертнуть это в обычные символы, типо самое большое море. Например, средствами питона.
  • Вопрос задан
  • 96 просмотров
Пригласить эксперта
Ответы на вопрос 4
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, экс-олимпиадник.
Этот текст - это символы Unicode.

Например, "б" в слове "большое" - это символ 0x0431

Проблема в том, что там символы не из одного алфавита, а полная солянка. На этом сайте можно получить коды всех символов: https://www.rapidtables.com/convert/number/ascii-t...
Получите:
1D04 1D00 28D 43E 1D07 20 431 43E 1D27 44C 26F 43E 1D07 20 28D 43E 1D29 1D07


Как видите, они все разбросаны довольно сильно. 1D** - Phonetic Extensions . 04** - Cyrillic, 02** - IPA Extensions

Символы из разных алфавитов подобраны по внешней похожести на нужные буквы (как Ш - это перевернутая m вообще). Наверно, какой-то онлайнг конвертер вроде этого где-то имеет набор из 33 кодов и подставляет их вместо русских букв. Не знаю, есть ли такой обратный.

Можно написать обратный конвертер на том же питоне, только надо руками сопоставить каждому символу из текста нужный символ из обычного ascii. Например, заведите солварь (вам надо руками все встречающиеся символы в исходной строке туда добавить):
convert = {'ᴀ': 'а', ... 'ʍ':'м', ...}

Потом примените его ко всем символам в вашей строке каким-нибудь map().
Ответ написан
Комментировать
402d
@402d
начинал с бейсика на УКНЦ в 1988
Может вы попутали шрифты с кодировками текста ?
Шрифт - это глифы (графическое представление символа алфавита в виде растра или кривой) + таблица соответствия (кода символа - глифу) В UTF шрифтах практически всегда одному глифу соответствует несколько кодов символов.

До появления мультибайтовых кодировок текста приходилось выкручиваться диапазоном в 256 значений.
Русский язык имел/имеет кодовые страницы cp866,cp1251,koi-8

Еще одно извращение встречается в PDF файлах - внедренный шрифт может оказаться черте как переставленным.
Фактически индивидуальная для документа кодовая страница

Типовая функция перекодировки текста имеет в ЯВУ обычно название iconv
Ответ написан
Комментировать
ValdikSS
@ValdikSS
ᴄᴀʍоᴇ боᴧьɯоᴇ ʍоᴩᴇ — набор малых латинских букв, кириллических и греческих.

Input: ᴄᴀʍоᴇ боᴧьɯоᴇ ʍоᴩᴇ
ᴄ:       LATIN LETTER SMALL CAPITAL C (U+1D04)
ᴀ:       LATIN LETTER SMALL CAPITAL A (U+1D00)
ʍ:       LATIN SMALL LETTER TURNED W (U+028D)
о:       CYRILLIC SMALL LETTER O (U+043E)
ᴇ:       LATIN LETTER SMALL CAPITAL E (U+1D07)
 :       SPACE (U+0020)
б:       CYRILLIC SMALL LETTER BE (U+0431)
о:       CYRILLIC SMALL LETTER O (U+043E)
ᴧ:       GREEK LETTER SMALL CAPITAL LAMDA (U+1D27)
ь:       CYRILLIC SMALL LETTER SOFT SIGN (U+044C)
ɯ:       LATIN SMALL LETTER TURNED M (U+026F)
о:       CYRILLIC SMALL LETTER O (U+043E)
ᴇ:       LATIN LETTER SMALL CAPITAL E (U+1D07)
 :       SPACE (U+0020)
ʍ:       LATIN SMALL LETTER TURNED W (U+028D)
о:       CYRILLIC SMALL LETTER O (U+043E)
ᴩ:       GREEK LETTER SMALL CAPITAL RHO (U+1D29)
ᴇ:       LATIN LETTER SMALL CAPITAL E (U+1D07)


Вам нужно:
  1. Нормализовать юникод по форме NFKD
  2. Транслитерировать символы в один из алфавитов, например, в ascii


Результат anyascii — cawoe bol'woe wore
Ответ написан
@Mercury13
Программист на «си с крестами» и не только
Вот разбор строки.
6638d576265ed231173995.png

Совместимая декомпозиция NFKD (а лучше совместимая композиция NFKC) конкретно тут не поможет (не меняет ни одного символа), но в других случаях может улучшить жизнь.

Затем тебе придётся работать с визуально сходными символами, и начинать надо отсюда.
https://util.unicode.org/UnicodeJsps/confusables.jsp

6638d67702c6c545558246.png

Этого тоже мало, но вот с этого начинать надо.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы