Problemy z piękną zupą i Unicode

Używam BeautifulSoup do analizowania niektórych stron internetowych.

Od czasu do czasu napotykam błąd „Unicode hell” w następujący sposób:

Patrząc na źródło tego artykułu na stronie TheAtlantic.com [http://www.theatlantic.com/education/archive/2013/10/why-are-harers-of-harvard-students-studying-ancient-chinese-philosophy/280356/ ]

Widzimy to w właściwości og: description meta:

<meta property="og:description" content="The professor who teaches&nbsp;Classical Chinese Ethical and Political Theory claims, &quot;This course will change your life.&quot;" />

Kiedy BeautifulSoup analizuje to, widzę to:

>>> print repr(description)
u'The professor who teaches\xa0Classical Chinese Ethical and Political Theory claims, "This course will change your life."'

Jeśli spróbuję zakodować go do UTF-8, tak jak ten komentarz SO sugeruje:https://stackoverflow.com/a/10996267/442650

>>> print repr(description.encode('utf8'))
'The professor who teaches\xc2\xa0Classical Chinese Ethical and Political Theory claims, "This course will change your life."'

Kiedy pomyślałem, że mam wszystkie problemy z Unicode pod kontrolą, nadal nie rozumiem, co się dzieje, więc zamierzam zadać kilka pytań:

1- dlaczego BeautifulSoup konwertuje&nbsp; do\xa0 [znak spacji w alfabecie łacińskim]? Zestaw znaków i nagłówki na tej stronie to UTF-8. Pomyślałem, że BeautifulSoup pobiera te dane do kodowania? Dlaczego nie został zastąpiony przez<space> ?

2- Czy istnieje wspólny sposób normalizacji białych znaków do konwersji?

3- Kiedy kodowałem do UTF8, gdzie to było\xa0 stać się sekwencją\xc2\xa0 ?

Potrafię wszystko przetrzećunicodedata.normalize('NFKD',string) aby pomóc mi dotrzeć tam, gdzie chcę - ale chciałbym zrozumieć, co jest nie tak i uniknąć w przyszłości tego problemu.

questionAnswers(1)

yourAnswerToTheQuestion