Узнайте скрипт Unicode персонажа - PullRequest
17 голосов
/ 26 марта 2012

Учитывая символ Unicode, что будет самым простым способом вернуть его script (как "Latin", "Hangul" и т. Д.)? unicodedata , по-видимому, не предоставляет такую ​​функцию.

Ответы [ 4 ]

18 голосов
/ 26 марта 2012

Я надеялся, что кто-то делал это раньше, но, видимо, нет, поэтому вот что я закончил. Модуль ниже (я называю это unicodedata2) расширяет unicodedata и предоставляет script_cat(chr), который возвращает кортеж (имя сценария, Caterogy) для символа юникода. Пример:

# coding=utf8
import unicodedata2
print unicodedata2.script_cat(u'Ф')  #('Cyrillic', 'L')
print unicodedata2.script_cat(u'の')  #('Hiragana', 'Lo')
print unicodedata2.script_cat(u'★')  #('Common', 'So')

Модуль: https://gist.github.com/2204527

5 голосов
/ 26 марта 2012

Мне кажется, что модуль Unicodedata Python содержит инструменты для доступа к главному файлу в базе данных Unicode, но ничего для других файлов: «Данные в этой базе данных основаны на файле UnicodeData.txt»

Информация о скрипте находится в файле Scripts.txt .Он имеет относительно простой формат (описан в UAX # 44 ) и не очень большой (131 килобайт), поэтому вы можете рассмотреть его в своей программе.Обратите внимание, что в классификации Unicode есть «общий» сценарий, который содержит символы, используемые в различных сценариях, например знаки препинания.

2 голосов
/ 26 марта 2012

Вы можете использовать ord для получения числового значения символа (оно работает как с юникодом, так и с байтовыми строками длиной 1).

Следующий шаг, к сожалению, будет связан с тестированием диапазонов. Возможно, данные здесь будут полезны: http://cldr.unicode.org/index/downloads

2 голосов
/ 26 марта 2012

Единственный известный мне способ - это, к сожалению, получить кодовую точку Unicode с ord(), а затем использовать свою собственную таблицу (используя http://en.wikipedia.org/wiki/Unicode#Standardized_subsets и более).Предварительное преобразование в некоторую нормальную форму может быть в порядке, чтобы справиться с тем фактом, что один «письменный» символ может быть выражен с различными последовательностями кодовых точек (здесь помогает модуль unicodedata).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...