2014-06-24 49 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。 –