Недавно столкнулся с необходимостью написать небольшой парсер одного вебресурса. Использовал urlopen из urllib2 и BeautifulSoup. Кодировка ресурса - utf-8, кодировка локали - тоже utf-8 (debian). Текстовые значения прекрасно обрабатываются, выводятся на экран, но только до того момента, когда их необходимо записать в файл или применить encode/decode.
Значение переменной grpname получаю следующим образом:
res = BeautifulSoup(urlopen(url).read())
grpname = c.contents[0].string
>>>print (grpname, u'Сортовой прокат')
(u'\u0421\u043e\u0440\u0442\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u043a\u0430\u0442', u'\u0421\u043e\u0440\u0442\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u043a\u0430\u0442')
>>>print (grpname, u'Сортовой прокат'.encode('utf-8'))
(u'\u0421\u043e\u0440\u0442\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u043a\u0430\u0442', '\xd0\xa1\xd0\xbe\xd1\x80\xd1\x82\xd0\xbe\xd0\xb2\xd0\xbe\xd0\xb9 \xd0\xbf\xd1\x80\xd0\xbe\xd0\xba\xd0\xb0\xd1\x82')>>>print (grpname.encode('utf-8'), u'Сортовой прокат'.encode('utf-8')) print (grpname.encode('utf-8'), u'Сортовой прокат'.encode('utf-8'))
Traceback (most recent call last):
File "test.py", line 49, in pctg
print (grpname.encode('utf-8'), u'Сортовой прокат'.encode('utf-8'))
File "/usr/lib/pymodules/python2.6/BeautifulSoup.py", line 430, in encode
return self.decode().encode(encoding)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-7: ordinal not in range(128)Подскажите пожалуйста, в чём может быть проблема?