Показать сообщение отдельно

  #10  
Старый 08.01.2010, 16:11
login999
Постоянный
Регистрация: 12.06.2008
Сообщений: 654
С нами: 9427413

Репутация: 973


По умолчанию

Цитата:
Сообщение от 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, и все равно как-то стремно их воспронимать так же =\

Последний раз редактировалось login999; 08.01.2010 в 20:20..
 
Ответить с цитированием