Вы можете проанализировать файл Scripts.txt
:
# -*- coding: utf-8; -*-
import bisect
script_file = "/path/to/Scripts.txt"
scripts = []
with open(script_file, "rt") as stream:
for line in stream:
line = line.split("#", 1)[0].strip()
if line:
rng, script = line.split(";", 1)
elems = rng.split("..", 1)
start = int(elems[0], 16)
if len(elems) == 2:
stop = int(elems[1], 16)
else:
stop = start
scripts.append((start, stop, script.lstrip()))
scripts.sort()
indices = [elem[0] for elem in scripts]
def find_script(char):
if not isinstance(char, int):
char = ord(char)
index = bisect.bisect(indices, char) - 1
start, stop, script = scripts[index]
if start <= char <= stop:
return script
else:
return "Unknown"
print find_script(u'A')
print find_script(u'Д')
print find_script(u'ሕ')
print find_script(0x1000)
print find_script(0xE007F)
print find_script(0xE0080)
Обратите внимание, что код не является ни надежным, ни оптимизированным.Вы должны проверить, обозначает ли аргумент действительный символ или кодовую точку, и объединить смежные эквивалентные диапазоны.