Bazı web sayfalarını ayrıştırmak için BeautifulSoup kullanıyorum. BazenGüzel Çorba ve Unicode Sorunları
Ben aşağıdaki gibi bir "unicode cehennem" hata çalıştırın: Bu makalenin kaynağı baktığımızda
TheAtlantic.com [http://www.theatlantic.com/education/archive/2013/10/why-are-hundreds-of-harvard-students-studying-ancient-chinese-philosophy/280356/]
Biz og bu bkz: tanım meta özelliği :<meta property="og:description" content="The professor who teaches Classical Chinese Ethical and Political Theory claims, "This course will change your life."" />
BeautifulSoup ayrıştırır, ben bakın
bu:
>>> print repr(description)
u'The professor who teaches\xa0Classical Chinese Ethical and Political Theory claims, "This course will change your life."'
Bu SO açıklama da anlaşılacağı gibi 363.210
ben UTF-8'e onu kodlayan çalışırsanız: 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."'
Ben kontrol altında bütün unicode sorunları, hala oldukça ne oluyor anlamıyorum olduğunu sanıyordum Sadece zaman, bu yüzden birkaç soru ortaya koymak için gidiyorum:
1-
neden BeautifulSoup
\xa0
için [latince charset boşluk karakteri] dönüştürmek ki? Bu sayfadaki karakter dizileri ve başlıklar UTF-8, BeautifulSoup'ın kodlama için bu verileri aldığını düşündüm. Neden bir
<space>
ile değiştirilmedi?
2- Dönüş için boşlukları normalleştirmenin ortak bir yolu var mı?
3- UTF8'e kodladığımda, \xa0
\xc2\xa0
dizisi haline geldi?
unicodedata.normalize('NFKD',string)
aracılığıyla nerede olmak istediğimi bulmama yardımcı olmak için her şeyi borularım - ama neyin yanlış olduğunu anlamak ve gelecekte bu gibi sorunlardan kaçınmak isterim.
Vay. Çok teşekkür ederim Brian. Bu inanılmaz derecede detaylı bir cevap. 2bayt dizisini anlamadım ve bu benim diğer endişelerimin% 99'unu açıklıyor! BTW - Bu örnekte kullanılmasının nedeninin "CMS Cruft" (birkaç kez karşılaştığım bir şey) olduğundan oldukça eminim. –
Evet, "CMS Cruft" HTML'yi ayrıştırmaya çalışırken her zaman bir sorun. –