Форум сайта python.su
Подскажите пожалуйста, какие есть ф-ции для изменения кодировки из юникода в UTF-8?
Читал статьи по юникоду и кодировке, но не знаю , какие методы можно использовать для изменения кодировки в ‘list’
Python v.2.7.9
Вот код:
import requests from bs4 import BeautifulSoup r = requests.get("http://fs.to/video/films/group/film_genre/") responce = r.content r.encoding = 'utf-8' print type(responce) page = BeautifulSoup(responce) for tag in page.findAll('li'): a=tag.find('a') print a.contents print type(a.contents)
type(responce) <type 'str'>
type(a.contents) <type 'list'>
[u'\u0410\u043d\u0438\u043c\u0435'] [u'\u0411\u0438\u043e\u0433\u0440\u0430\u0444\u0438\u044f'] [u'\u0411\u043e\u0435\u0432\u0438\u043a'] [u'\u0412\u0435\u0441\u0442\u0435\u0440\u043d'] [u'\u0412\u043e\u0435\u043d\u043d\u044b\u0439'] [u'\u0414\u0435\u0442\u0435\u043a\u0442\u0438\u0432'] [u'\u0414\u0435\u0442\u0441\u043a\u0438\u0439'] [u'\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439'] [u'\u0414\u0440\u0430\u043c\u0430'] [u'\u0418\u0441\u0442\u043e\u0440\u0438\u044f'] [u'\u041a\u043e\u043c\u0435\u0434\u0438\u044f'] [u'\u041a\u043e\u0440\u043e\u0442\u043a\u043e\u043c\u0435\u0442\u0440\u0430\u0436\u043a\u0430'] [u'\u041a\u0440\u0438\u043c\u0438\u043d\u0430\u043b'] [u'\u041c\u0435\u043b\u043e\u0434\u0440\u0430\u043c\u0430'] [u'\u041c\u0438\u0441\u0442\u0438\u043a\u0430'] [u'\u041c\u044e\u0437\u0438\u043a\u043b'] [u'\u041d\u0443\u0430\u0440'] [u'\u041f\u0440\u0438\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f'] [u'\u0421\u0435\u043c\u0435\u0439\u043d\u044b\u0439'] [u'\u0422\u0440\u0438\u043b\u043b\u0435\u0440'] [u'\u0423\u0436\u0430\u0441\u044b'] [u'\u0424\u0430\u043d\u0442\u0430\u0441\u0442\u0438\u043a\u0430'] [u'\u0424\u044d\u043d\u0442\u0435\u0437\u0438'] [u'\u042d\u0440\u043e\u0442\u0438\u043a\u0430']
Отредактировано sourser (Фев. 21, 2015 10:57:28)
Офлайн
857
Во втором питоне он так выводит списки. Если выведешь просто элементы, будет нормально показывать.
Во втором:
>>> [u'абв'] [u'\u0430\u0431\u0432'] >>> >>> [u'абв'][0] u'\u0430\u0431\u0432' >>> >>> print [u'абв'][0] абв >>>
>>> ['абв'] ['абв'] >>>
Отредактировано py.user.next (Фев. 21, 2015 12:33:26)
Офлайн
py.user.nextЯ пробывал вывести их , но у меня не выходит(
Во втором питоне он так выводит списки. Если выведешь просто элементы, будет нормально показывать.Во втором:
Офлайн
857
Там уже всё правильно раскодировано.
>>> lst = [ ... [u'\u0410\u043d\u0438\u043c\u0435'], ... [u'\u0411\u0438\u043e\u0433\u0440\u0430\u0444\u0438\u044f'], ... [u'\u0411\u043e\u0435\u0432\u0438\u043a'], ... [u'\u0412\u0435\u0441\u0442\u0435\u0440\u043d'], ... [u'\u0412\u043e\u0435\u043d\u043d\u044b\u0439'], ... [u'\u0414\u0435\u0442\u0435\u043a\u0442\u0438\u0432'], ... [u'\u0414\u0435\u0442\u0441\u043a\u0438\u0439'], ... [u'\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439'], ... [u'\u0414\u0440\u0430\u043c\u0430'], ... [u'\u0418\u0441\u0442\u043e\u0440\u0438\u044f'], ... [u'\u041a\u043e\u043c\u0435\u0434\u0438\u044f'], ... [u'\u041a\u043e\u0440\u043e\u0442\u043a\u043e\u043c\u0435\u0442\u0440\u0430\u0436\u043a\u0430'], ... [u'\u041a\u0440\u0438\u043c\u0438\u043d\u0430\u043b'], ... [u'\u041c\u0435\u043b\u043e\u0434\u0440\u0430\u043c\u0430'], ... [u'\u041c\u0438\u0441\u0442\u0438\u043a\u0430'], ... [u'\u041c\u044e\u0437\u0438\u043a\u043b'], ... [u'\u041d\u0443\u0430\u0440'], ... [u'\u041f\u0440\u0438\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f'], ... [u'\u0421\u0435\u043c\u0435\u0439\u043d\u044b\u0439'], ... [u'\u0422\u0440\u0438\u043b\u043b\u0435\u0440'], ... [u'\u0423\u0436\u0430\u0441\u044b'], ... [u'\u0424\u0430\u043d\u0442\u0430\u0441\u0442\u0438\u043a\u0430'], ... [u'\u0424\u044d\u043d\u0442\u0435\u0437\u0438'], ... [u'\u042d\u0440\u043e\u0442\u0438\u043a\u0430'] ... ] >>> >>> for i in lst: ... s = i[0] ... print s ... Аниме Биография Боевик Вестерн Военный Детектив Детский Документальный Драма История Комедия Короткометражка Криминал Мелодрама Мистика Мюзикл Нуар Приключения Семейный Триллер Ужасы Фантастика Фэнтези Эротика >>>
Офлайн
39
Проще 
print repr(lst).decode("unicode_escape")
Офлайн
4kpt_IIIЯ правильно указал?
Проще
#! /usr/bin/env python # -*- coding: utf-8 -*- import requests from bs4 import BeautifulSoup r = requests.get("http://fs.to/video/films/group/film_genre/") r.encoding = 'utf-8' response = r.content page = BeautifulSoup(response) lst = [] for tag in page.findAll('li'): a = tag.find('a') for b in a.contents: lst.append(b.string) for i in lst: s = i[0] print (u'{0}'.format(u'○')),unicode(s)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128)
Отредактировано sourser (Фев. 22, 2015 15:23:22)
Офлайн
857
4kpt_IIIОно уже в юникоде, ничего не надо перекодировать. Перекодировка понадобится при сохранении в файл, да и то она передаётся аргументом в io.open().
Проще :)print repr(lst).decode("unicode_escape")
sourserЭтот результат получается, потому что ты неправильно используешь unicode().
Результат:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128)
help(unicode)
>>> print [u'\u0410\u043d\u0438\u043c\u0435'] [u'\u0410\u043d\u0438\u043c\u0435'] >>>
>>> print u'\u0410\u043d\u0438\u043c\u0435' Аниме >>>
>>> [u'\u0410\u043d\u0438\u043c\u0435'] [u'\u0410\u043d\u0438\u043c\u0435'] >>>
>>> u'\u0410\u043d\u0438\u043c\u0435' u'\u0410\u043d\u0438\u043c\u0435' >>>
Отредактировано py.user.next (Фев. 23, 2015 00:39:56)
Офлайн
39
py.user.next
Оно уже в юникоде, ничего не надо перекодировать. Перекодировка понадобится при сохранении в файл, да и то она передаётся аргументом в io.open().
>>> a = [u"Юникод", u"И это тоже"] >>> print a [u'\u042e\u043d\u0438\u043a\u043e\u0434', u'\u0418 \u044d\u0442\u043e \u0442\u043e\u0436\u0435'] >>> print repr(a).decode("unicode_escape") [u'Юникод', u'И это тоже']
Отредактировано 4kpt_III (Фев. 23, 2015 02:14:17)
Офлайн
857
4kpt_IIIЧто он делает, понятно и без выполнения. Просто делать это - неправильно. Надо выводить сами фразы.
Хоть бы выполнили код, который я написал…
Офлайн
39
py.user.next
Надо выводить сами фразы.
print a.contents[0]
Отредактировано 4kpt_III (Фев. 23, 2015 07:56:55)
Офлайн