Найти - Пользователи
Полная версия: Юникод в строку без .encode()
Начало » Python для новичков » Юникод в строку без .encode()
1 2 3
odnochlen
Есть ли другое решение вместо unicode.encode(encoding), вроде str(unicode, encoding)?
JOHN_16
u2s=lambda x,y: x.encode(y)
и т.п.? ибо стандартных средств вроде нет
adray
python 2.7:
import codecs
codecs.encode(unicode, encoding)

python 3.2:
str(unicode, encoding)
odnochlen
adray
import codecs
codecs.encode(unicode, encoding)

Это ведь то же самое, что u'unicode'.decode(), включая возможность вызвать decode для юникода?
adray
>>> 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)
как-то так.
odnochlen
Проверил - codecs.encode('str', ‘cp1251’) работает. Пичалька. Почему бы хотя бы не кидать исключение “нефиг кодировать из байтов, быдло!”?
adray
odnochlen
Проверил - codecs.encode('str', ‘cp1251’) работает. Пичалька. Почему бы хотя бы не кидать исключение “нефиг кодировать из байтов, быдло!”?
Что в этом плохого? Байты тоже символы. Собственно, если ‘str’ - не unicode, то она декодируется дефолтным кодеком (ascii) и затем декодируется в выбранную кодировку.
odnochlen
Плохо то, что каша получается.
adray
Собственно, если ‘str’ - не unicode, то она декодируется дефолтным кодеком (ascii) и затем декодируется в выбранную кодировку.
А если в ней будет хоть один неаскишный символ, то выкинет UnicodeDecodeError. А настоящая ошибка не в том, что юзер не указал кодировку (ее указать негде), а в том, что он пытается кодировать в кодировку строку.
Нужно как в тройке - лишних методов там нет + добавить бы кодеки типа hex, для них действительно имеет смысл перекодирование bytes <-> bytes.
py.user.next
>>> unicode('abcd', 'ascii')
u'abcd'
>>>

odnochlen
Нужно как в тройке - лишних методов там нет + добавить бы кодеки типа hex, для них действительно имеет смысл перекодирование bytes <-> bytes.
нужно переписать всё для третьей версии и забыть уже про второй питон, как про страшный сон
odnochlen
py.user.next
>>> unicode('abcd', 'ascii')
u'abcd'
>>>
Вот такое бы для str.

py.user.next
нужно переписать всё для третьей версии и забыть уже про второй питон, как про страшный сон
Модули для тройки дай, а то я с радостью.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB