All streams
Search
Write a publication
Pull to refresh
49
0
Владимир Керимов @Qualab

User

Send message
Как раз нет, на уровне протокола уже нужно оперировать массивами байт. Благо методы у них примерно такие же. Зато не происходит подмена понятий байт-символ и нет этой вечной путаницы с кодировками на уровне строк, которые должны представляться однозначно на своём уровне абстракции.
Нет, не так, URL — это по сути своей строка, либо Request. Зачем пихать в неё массив байт?
Если тебе прямо так необходимо сделать из строки массив байт, то используй encode(xxx) с нужной тебе кодировкой.
"http://{:s}:{:d}/".format(host, port).encode('cp1251')
Правда если ты хочешь именно URL, и жаждешь самостоятельно перекодировать и отправлять байты, то тут тебя ждут отличные перспективы велосепеда. Используй строку.
В ряде случаем, имхо, симпатичнее выглядит старое форматирование:
'Введите значения поля "%s": ' % field_name
Не нужно писать скобки (для одного аргумента), вызывать метод format (опять же со скобками), и мы сразу же принудительно указываем, что выводим строку.
Хотя я конечно фанатею от конструкции
'{:%Y-%d-%m %H:%M:%S}'.format( datetime.now() )
Если host — строка, то ни во что криминальное не превращается. Всё как и раньше.
Если host — массив байт, то что мы называем «строкой» в С++ или Python 2.x, то нужно писать так:

url = «%s:%d/» % (host.decode('cp1251'), port)

Вот именно из-за аргумента в методе decode() и нельзя считать массив байт строкой. Поскольку в строке каждый элемент — символ, а в массиве байт — каждый элемент байт. Если нужно массив байт однозначно представить строкой — используйте decode(encoding).

Интерпретация чего бы то ни было строкой должна быть явной, либо вы используете __str__.
См. import this — явное лучше неявного. Не уверен в "%s" % X — не пиши.
Вообще-то обычная строка, либо Request:
urllib.request.urlopen(url, data=None[, timeout], *, cafile=None, capath=None)
Open the URL url, which can be either a string or a Request object.
docs.python.org/py3k/library/urllib.request.html
И это — логично!
Ну и что плохого в том, что строка — это набор символов Юникод, а не байтов?
Массив байтов теперь правильно называется, и прекрасно декодируется в Юникод и обратно при указании локали.
Большинство библиотек работающих с пересылкой данных по сети требуют кроме 2to3 ещё и дополнительных правок с encode() и decode() и это здорово.
Теперь мы пересылаем по сети массивы байт, а не строки, как и было задумано.
Наконец-то это древний допотопный анахронизм про то что байт = символ уходит в прошлое. Мне не нужно думать о том что такое символ, не нужно думать о кодировке, у меня есть строка и я всегда уверен что она однозначно определена.
Большое спасибо за перевод, статья интересная, хоть и излишне экспрессивная.
C++ замечательный язык, если ты очень хорошо пишешь, иначе всевозможные неявные выделения памяти, неявные копирования, неэффективная сериализация. В общем не для новичка язык.
Что касается MS Visual C++, то в версии 2010 становится ясно, что пора переходить на gcc g++. Жутко тормозит, долго компилирует, отсутствие нормального рефакторинга, тот же бесплатный эклипс в разы лучше нежели msvs 2010. Есть конечно вариант остаться на MSVC 2008, но хочется С++11.
Конференция по Visual C++, даже не знаю, я бы тоже не пошёл… что там нового я мог бы услышать?
Да, но к сожалению она не всесильна. Некоторые вещи она сделать не может и часто приходится подчищать за ней руками. Приходится писать скрипты, которые запускают 2to3, а потом вносят необходимые правки.
12 ...
13

Information

Rating
Does not participate
Location
Ярославль, Ярославская обл., Россия
Date of birth
Registered
Activity

Specialization

Game Developer
Lead