Форум сайта python.su
14
Есть ли другое решение вместо unicode.encode(encoding), вроде str(unicode, encoding)?
Офлайн
221
u2s=lambda x,y: x.encode(y)
Офлайн
18
python 2.7:
import codecs codecs.encode(unicode, encoding)
str(unicode, encoding)
Офлайн
14
adrayimport codecs codecs.encode(unicode, encoding)
Офлайн
18
>>> pdb.run("'ф'.decode('utf-8')") > <string>(1)<module>() (Pdb) s --Call-- > /usr/lib/python2.7/encodings/utf_8.py(15)decode() -> def decode(input, errors='strict'): (Pdb) s > /usr/lib/python2.7/encodings/utf_8.py(16)decode() -> return codecs.utf_8_decode(input, errors, True) (Pdb) s --Return-- > /usr/lib/python2.7/encodings/utf_8.py(16)decode()->(u'\u0444', 2) -> return codecs.utf_8_decode(input, errors, True)
Офлайн
14
Проверил - codecs.encode('str', ‘cp1251’) работает. Пичалька. Почему бы хотя бы не кидать исключение “нефиг кодировать из байтов, быдло!”?
Отредактировано odnochlen (Окт. 13, 2012 19:14:33)
Офлайн
18
odnochlenЧто в этом плохого? Байты тоже символы. Собственно, если ‘str’ - не unicode, то она декодируется дефолтным кодеком (ascii) и затем декодируется в выбранную кодировку.
Проверил - codecs.encode('str', ‘cp1251’) работает. Пичалька. Почему бы хотя бы не кидать исключение “нефиг кодировать из байтов, быдло!”?
Офлайн
14
Плохо то, что каша получается.
adrayА если в ней будет хоть один неаскишный символ, то выкинет UnicodeDecodeError. А настоящая ошибка не в том, что юзер не указал кодировку (ее указать негде), а в том, что он пытается кодировать в кодировку строку.
Собственно, если ‘str’ - не unicode, то она декодируется дефолтным кодеком (ascii) и затем декодируется в выбранную кодировку.
Офлайн
857
>>> unicode('abcd', 'ascii') u'abcd' >>>
odnochlenнужно переписать всё для третьей версии и забыть уже про второй питон, как про страшный сон
Нужно как в тройке - лишних методов там нет + добавить бы кодеки типа hex, для них действительно имеет смысл перекодирование bytes <-> bytes.
Отредактировано py.user.next (Окт. 14, 2012 10:27:32)
Офлайн
14
py.user.nextВот такое бы для str.>>> unicode('abcd', 'ascii') u'abcd' >>>
py.user.nextМодули для тройки дай, а то я с радостью.
нужно переписать всё для третьей версии и забыть уже про второй питон, как про страшный сон
Отредактировано odnochlen (Окт. 14, 2012 17:57:29)
Офлайн