2011-02-24 40 views
0

如何从文档中获取西里尔字符串?如何从文档中获取西里尔字符串

我有休耕代码:

import urllib 
from BeautifulSoup import BeautifulSoup 

page = urllib.urlopen("http://habrahabr.ru/") 
soup = BeautifulSoup(page.read()) 
for topic in soup.findAll(True, 'topic'): 
    print topic 
    print 
raw_input() 

有网站,但蟒蛇显示错误的字符上西里尔字。

对于这个问题的任何帮助,我都会很有帮助。

PS。

我改变

soup = BeautifulSoup(page.read()) 

soup = BeautifulSoup(page.read(), fromEncoding="utf-8") 

,仍然没有结果...

回答

3

HTML页面上的数据在UTF-8编码。看来您正在将其打印到您的控制台,其中sys.stdout.encoding是cp1251。这说明了你所看到的垃圾。

下面是检查前8个字节的第一个话题,用闲置的结果:

>>> raw = '\xd0\x90\xd0\xbb\xd0\xb3\xd0\xbe' 
>>> print raw.decode('utf8') 
Алго 
>>> print raw.decode('cp1251') 
Алго 
>>> 
+0

抓住这个功能,但我什么,我需要在我的例子中做?我试图转换 'page.read()。decode('utf8')' 但没有结果... – Mirgorod 2011-02-24 23:04:49

+0

嗯,这很奇怪,但只有一个这些是正常显示...其他项目是错误的字符。 .. – Mirgorod 2011-02-24 23:07:34

0

感谢您的帮助。

我解决问题与此代码:在Django

print str(topic).decode('utf8') 
+0

我非常怀疑'str()'是必需的。 'print topic.decode('utf8')'应该就足够了。 – 2011-02-25 01:05:20

+0

我想在某些情况下它可能是必需的,因为Python 3将unicode类型重命名为str,而旧的str类型已被字节替换。 – str14821 2014-04-28 15:40:56

0

我解决这样说:

from django.utils.encoding import force_unicode 
print ("%s" % force_unicode(topic, encoding='utf-8', strings_only=False, errors='strict')) 

这样你就可以从Django中