2016-08-19 41 views
0

我試圖從網站頁面解析cyrillyc文本,如果我嘗試打印包含在引號中的引號的湯匙。字 「字」BeautifulSoup錯過一些字母從UTF-8解碼到unicode

error 'charmap' codec can't encode character u'\xab' in position 6: charater maps to undefined

原始字符串頁面(UTF-8)

urllib2.urlopen raw page = bbb = '\xab\x80\xd1\x8c\xc2\xbb' 

\ XBB和\ xab-它的右引號

我嘗試轉換由專人爲Unicode( BeautifulSou p還這太) unicode(bbb, 'utf8', errors='ignore')

但inspite錯誤關鍵的「忽略」未知元素,他們仍然存在INT

我得到

\xab\u0446\u0435\u0437\u0430\u0440\u044c**\xbb**'

我嘗試刪除開始與所有未知元素^ \ X與幫助普通EXP,但它不工作

bbb = re.sub(r'[\x00-\x7f]', r' ', bbb) 
+0

問題不在於bs4,它是您系統上的編碼問題。 –

回答

0

But inspite of error key "ignore" unknown elements they still exists

u'\xbb'不是一個未知的元素,那裏沒有問題。它代表字符U + 00BB右指向雙角引號。 Unicode字符串文字u'\xbb'u'\u00bb'表示相同的字符串。

\x具有不同的含義,具體取決於它使用什麼樣的字符串文字。在字節字符串中,它引入了一個從0x00到0xFF的十六進制編碼的字節。在Unicode字符串中,它引入了從U + 0000到U + 00FF的十六進制編碼字符。當生成字符串的repr()表示形式時,Python傾向於使用\x轉義輸出範圍高達U + 00FF的字符,而不是可以說是更清晰的\u轉義符,因爲它們更短。

\u\x只是替代方式來引用字符串文字表示中的字符;它們不是字符串值的一部分。該值中沒有實際的反斜槓,因此您不能使用re嘗試刪除repr()窗體中可能出現的字符作爲反斜槓轉義。

實際的錯誤:

error 'charmap' codec can't encode character u'\xab' in position 6: charater maps to undefined

再次就是PrintFails如常。顯然你的控制檯正在使用一個不包含字符U + 00AB的編碼。

如果您正在使用Windows命令提示符,則可以嘗試使用win-unicode-console作爲該特定控制檯破損的解決方法。