Сообщение от
rushter
Я делаю так:
Бред,но пока не подводил

Там в 3.1 меня напрягает этот bytes тип данных. Мне, как привыкшему к 2.6 сложно выкупить там все эти хитросплетения. Фактически, у bytes есть возможность сделать только .decode(), после которого они превращаются в str в кодировке UTF-8, обьекты типа str можно только encode() в bytes кодировки, указанной при вызове encode(). Т.е после .decode получаем str с возможностью вызова только .encode(), а после encode() получаем bytes с возможностью вызова исключительно .decode() для получения str.
Какая-то блин слишком strict работа с кодировками ИМХО.
Я привык к типу данных unicode в 2.6 который мне уже кажется очень простым и гибким при работе с кодировками.
Хотя я конечно, в экстазе от:
Код:
import sys
def жаба():
print "Я квакаю".encode(sys.getdefaultencoding())
Судя по отсутствию комментов к этому посту скорее всего все подумали "Какого хрена он это написал???"
Обьясню код от rushter с точки зрения Python 3.1 и Python 2.6:
Код:
# -*- coding: UTF-8 -*-
import re,urllib
res = urllib.urlopen('http://bash.org.ru/random')
res= res.read().decode('cp1251')#Вот здесь вот с точки зрения Python2.6 Идет: .read() - чтение данных, которые имеют тип str(некая абстрактная строка в неизвестной кодировке(для python)),потом идёт перевод этой строки в тип unicode(это для Python едино и понятно). С точки зрения Python3.1 здесь при .read() идёт чтение в этот новый тип bytes, которые представляют собой "просто байты", работать с этим типом как со строковыми данными нельзя, для этого необходимо сделать .decode() из кодировки этих байтов, в результате чего они преображаются в тип str, который являет собой строку в кодировке UTF-8 (фактически, насколько я понял, str - это тот же unicode, просто что все четко прописано)
s=re.search(r"<div>(.*?)<\/div>",res)
for x in s.groups():
print(str(x))#Вот здесь идет вывод собранных данных в консоль, вот здесь то меня и напрягает то, что на печать все пошло нормально, либо Python автоматически переводит весь вывод в кодировку терминала, либо у Ice_VeNOm кодировка терминала - UTF-8. И вот такое преображение в str()оно здесь не нужно нафик (по идее)
Хз короче, путаница одна с этим Python 3.1. Мб кто из опытных обьяснит, что там с этим bytes и str, ато я вроде и понимаю что они это типа аналог unicode из 2.6, и все равно как-то стремно их воспронимать так же =\