На самом деле, работая только со строками, не прибегая к извлечению номера кодовой точки и используя функцию chr
, можно создать соответствующие символы Юникода:
Модуль codecs
вВ stdlib есть функции для регистрации и получения текстовых кодеков: сопоставления текста и байтов и некоторые другие преобразования текста или байтов.
Среди этих преобразований есть символ unicode_escape
.Его можно использовать непосредственно при преобразовании объекта байтов в текст с использованием метода bytes.decode
, но его также можно получить с помощью codecs.getdecoder("unicode_escape")
и преобразовать текст в текст.
Поэтому можно выполнить:
In [139]: import codecs
In [140]: esc = codecs.getdecoder("unicode_escape")
In [141]: for i in range(10):
...: print(esc(f"\\u208{i}")[0], end=" ")
...:
...:
...:
₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉
Вызов декодеру возвращает кортеж с результатом и количеством использованных входных символов.[0]
после вызова получает только преобразованный результат.
(Выше я использовал синтаксис "f-string", который заменил метод .format
почти для всех применений в Python 3.6)
Обычно каждый предпочитает использовать встроенный chr
, так как он избегает манипулирования с форматированием строк и может работать с числами напрямую.(если бы мы хотели, чтобы более 16 символов начинались с определенной кодовой точки, описанный выше метод не работал бы, как есть, например).
print(" ".join(chr(0x2080 + i) for i in range(29)))
выведет:
₀ ₁ ₂ ₃10 ₅ 10 ₇ ₈ ₉ ₋ ₋ ₌₎ ₒ ₒ ₕ ₖ ₖ ₘ ₙ 10 10 10