| |||
|
|
Вопрос к знатокам питона Дано: 3-й питон, юникодная строка, примерно до миллиона символов длиной. Надо: преобразовать эту строку в произвольную 8-битную кодировку, заменяя все символы, отсутствубщие в данной кодировке на html-ные entities. Как это быстрее всего сделать? По идее питоновский стиль это "попытаться преобразовать, получить исключение, обработать". Собственно, так и написал: from html.entities import codepoint2name complete=False while not complete: try: binary=data.encode(output_encoding) out += binary complete=True except UnicodeEncodeError as e: badchar = data[e.start] out +=data[:e.start].encode(output_encoding) data=data[e.start+1:] if ord(badchar) in codepoint2name: out+=b'&'+codepoint2name[ord(badchar)].encode("ascii")+b';'; else: out+=b"%d;"%ord(badchar); Но что-то скорость работы этой конструкции мне не нравится (даже на довольно быстрой моей рабочей станции миллион символов из которых только 7200 не представлены в целевой кодировке, жует 0.9 секунды). Какие еще способы решения этой задачи можно предложить? This entry was originally posted at https://vitus-wagner.dreamwidth.org/2007 |
||||||||||||||