html.parser.unescape возвращает странно закодированную строку

#python #html #decode #encode #ironpython

Вопрос:

В этот момент я в замешательстве. Я пытаюсь расшифровать какой-то тест в кодировке HTML, а затем разделить его на символ. Однако кодировка, которую я получаю, html.parse.unescape делает это невозможным.

Единственный раз, когда он отформатирован «правильно», это когда я печатаю результаты, __repr__ и __str__ оба они в этом закодированном формате.

Вот образец:

 import html.parser


raw_str = '10:20amamp;nbsp;amp;ndash;amp;nbsp;12:10pm'

decoded_str = html.parser.unescape(raw_str)

print(decoded_str)
print(decoded_str.split('-'))
 

Выход:

 10:20am – 12:10pm
['10:20amxa0–xa012:10pm']
 

Выходные данные показывают, что decoded_str разделяется не так, как я ожидал, и что присутствуют закодированные символы. Если мы проверим тип этого значения, мы получим следующее:

 >>> type(decoded_str)
<class 'str'>
 

decoded_str предположительно это строка, и я смотрю на - символ в середине, но он отказывается разделяться, и эти закодированные символы вызывают всевозможные проблемы. Последнее замечание, я считаю, что, хотя - символ отображается в приведенном выше примере, на самом деле он расшифровывается на u2013 основе моих результатов из экземпляра IronPython.

Комментарии:

1. Этот символ представляет собой n-тире, а не обычный символ тире ASCII.

2. Используйте chr(8211) вместо '-'