2013-07-10 41 views
0

这里是我的代码:Python的机械化:编码会导致奇怪的字符

import re 
import mechanize 

br = mechanize.Browser() 
br.open("http://www.douban.com/") 
print br.title() 

我参观的是一个中国网站,但返回的标题是性格怪异,

我怎么能固定这个问题?

+1

你能否给我们一个奇怪的字符,通过使用repr(br.title())?另请提供原创中文内容。 – Sheng

+0

@盛:正确的标题应该是'豆瓣',但奇怪的字符是'璞嗙摚',这不是我想要的 – hh54188

回答

0

这是因为charset问题。例如,在Python 3.X:

>>> print("豆瓣".encode("utf8").decode('gbk')) 
璞嗙摚 

换句话说,thte内容 “豆瓣” 从serive被编码在字符集 “UTF8”。但是你的客户尝试将它显示为字符集“gbk”。为了解决这个问题,你需要在这两个不同的字符集之间传送内容,比如br.title()。encode('gbk')。decode(“utf8”)

+0

所以这只是显示问题?当我将它保存到数据库时,我得到的内容仍然是正确的,内容仍然是utf8? – hh54188

+0

@ hh54188的种类,是的。在内存中,或者在字节方面,你得到的是你想要的。但是你的系统必须选择一个字符集来解释这些字节并打印出来。该字符串被编码为utf8字节。如果你使用gbk charset来解释这些字节,你会得到不正确的print_out_content。 – Sheng

1

如果你只是做br.title()它会给你特殊字符的Unicode字符串。

print尝试通过编码Unicode字符串来显示非ASCII字符。