Форум сайта python.su
http://habrahabr.ru/post/147281/
Обсуждаем.
Как по мне - автор не имеет ни малейшего представления, к какому гимору может привести юникод в 2.х. Хотя в чем-то он прав - изменения ради изменений в промышленной разработке не рулит.
Отредактировано odnochlen (Июль 12, 2012 09:22:19)
Офлайн
Чего так тихо-то?
Офлайн
Автор имеет представление поболе большинства форумчан и уважаем в сообществе, если что.
Ну и статью в 2011 все прочли в оригинале, кто хотел)
Офлайн
Он может и уважаем, но с проблемами с юникодом имел дело скорее всего даже меньше меня. Или у него просто другие приоритеты.
Одно то, что sys.argv в двойке байтовый и лечится это только осезависимыми хаками.
Хотя с фреймверками на тройке, видимо, бида, даже pycurl на нем нет
Офлайн
odnochlen
про argv - arg.decode(sys.getfilesystemencoding()). не даёт в винде ожидаемого результата ?
ну и юзать юникодные параметры - моветон, разве что для поиска, не более
Офлайн
Про sys.argv(0) и юникодные пути с символами, которых нет в текущей кодовой таблице не забываем.
Люди любят не ставить u перед строками.
Неявные преобразования юникода реально могут свести с ума.
И это только одни из примеров, на которые я лично наткнулся.
Отредактировано odnochlen (Июль 15, 2012 02:38:52)
Офлайн
>>> '1' == '1'[0] True >>> b'1' == b'1'[0] False
>>> b'1'==b'1'[:] True
Офлайн
>>> type(b'1') <class 'bytes'> >>> type(b'1'[0]) <class 'int'> >>>
Офлайн
А зачем так сделали?Просто в двойке префикс b' игнорируется - т.е b'l' это str.
http://docs.python.org/reference/lexical_analysis.html2.7
prefix of ‘b’ or ‘B’ is ignored in Python 2; it indicates that the literal should become a bytes literal in Python 3
>>> l = bytearray('l') >>> l[0] == l False >>> l[:] == l True >>> type(l) <type 'bytearray'> >>> type(l[0]) <type 'int'> >>> type(l[:]) <type 'bytearray'> >>> type(b'l') <type 'str'> >>> type(b'l'[0]) <type 'str'> >>> type(b'l'[:]) <type 'str'> >>> b'l' == b'l'[0] True >>> b'l' == b'l'[:] True
http://docs.python.org/library/stdtypes.html
Objects of different types, except different numeric types and different string types, never compare equal
Отредактировано EBFE (Июль 24, 2012 02:00:09)
Офлайн
EBFEВ моем примере речь шла о тройке. Наверно, надо было это написать, хотя тройка тут считается практически дефолт питоном.
Просто в двойке префикс b' игнорируется
Отредактировано odnochlen (Июль 24, 2012 06:35:36)
Офлайн