2014-06-24 80 views
0

假設我有很多東西像Python的Unencode unicode的HTML十六進制

“words words words 

字符串有沒有辦法將這些通過蟒蛇直接轉換成他們所代表的人物?

我試圖

h = HTMLParser.HTMLParser() 
print h.unescape(x) 

但得到這個錯誤:

UnicodeEncodeError: 'ASCII' 編解碼器在0-2位置無法編碼的字符:順序不在範圍內(128)

我也試過

print h.unescape(x).encode(utf-8) 

但它編碼

“作爲â

時,它應該是一個報價

+0

是什麼讓你覺得'“'應該是逗號?這是從哪裏來的?把它們轉換成它們代表'h.unescape(x)'的字符呢......但是當你嘗試打印它時出現問題......試着看看它的repr –

+0

我說的不是逗號。從上下文中可以明顯看出它是一個引用,因爲它們出現在應該有引號的字符串的開始和結尾。這個頁面在「作爲一個HTML實體字符串:」部分中顯示了這一點:http://software.hixie.ch/utilities/cgi/unicode-decoder/character-identifier?characters=%E2%80%9C – user3752900

+0

我的錯誤...好吧,這給我更多的工作與保持 –

回答

1

“形成一個UTF-8字節序列,爲U+201C LEFT DOUBLE QUOTATION MARK字符。有些東西在那裏被大大地破壞了。正確的編碼應該是“

可以使用HTML解析器反轉義這一點,但你需要修復所產生的Mochibake

>>> import HTMLParser 
>>> h = HTMLParser.HTMLParser() 
>>> x = '“' 
>>> h.unescape(x) 
u'\xe2\x80\x9c' 
>>> h.unescape(x).encode('latin1') 
'\xe2\x80\x9c' 
>>> h.unescape(x).encode('latin1').decode('utf8') 
u'\u201c' 
>>> print h.unescape(x).encode('latin1').decode('utf8') 
「 

如果打印還是給你一個UnicodeEncodeError,那麼你的終端或控制檯配置不正確,Python不能完全編碼爲ASCII。

+0

謝謝你,這就是我一直在尋找的。我正在解析一些網頁爬蟲的東西,通過一些搞砸的網頁。最後一行在終端中工作,雖然不是在崇高的文本,所以你是對的,我需要配置 – user3752900

+0

是的,SublimeText控制檯不通信它使用的編解碼器,IIRC。 –

+0

ahh比我用unicode字符串得到它的方法好很多+1漂亮的作品 –

0

的問題是,你不能正確解碼的unicode ......你需要將其從Unicode轉換客場只是UTF8

x="“words words words" 
h = HTMLParser.HTMLParser() 
msg=h.unescape(x) #this converts it to unicode string .. 
downcast = "".join(chr(ord(c)&0xff) for c in msg) #convert it to normal string (python2) 
print downcast.decode("utf8") 

在HTMLParser庫中可能有更好的方法...

+0

因爲它是一個UTF-8編碼的U + 201C左雙引號標記點。這是一個Mochibake。 –