Уведомления

Группа в Telegram: @pythonsu

#1 Март 2, 2012 12:09:09

sonniy
От:
Зарегистрирован: 2009-12-18
Сообщения: 84
Репутация: +  0  -
Профиль   Отправить e-mail  

socket send не шлет unicode

у меня есть вот такая строка u'\xb8\x0c' и я пытаюсь слать :

 Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner
self.run()
File "f8.py", line 283, in run
sock.send(size)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xb8' in position 0: ordinal not in range(128)
мне нужно переслать по сути байты, это у нас два байта … вот они 0b10111000 и 0b00001100

как переслать данные так что бы на другом конце получили именно эти байты (0b10111000 и 0b00001100) ?

ЗЫ
прошу прощения , я похоже не в том разделе отпостил :)



Отредактировано (Март 2, 2012 13:58:32)

Офлайн

#2 Март 2, 2012 14:59:43

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

socket send не шлет unicode

.encode('utf8') например



Офлайн

#3 Март 3, 2012 02:55:36

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

socket send не шлет unicode

>>> u'\x00\x01\xff'.encode('utf-8')
'\x00\x01\xc3\xbf'
>>> u'\x00\x01\xff'.encode('latin1')
'\x00\x01\xff'
>>>



Офлайн

#4 Март 3, 2012 13:06:40

sonniy
От:
Зарегистрирован: 2009-12-18
Сообщения: 84
Репутация: +  0  -
Профиль   Отправить e-mail  

socket send не шлет unicode

Спасибо!!!
latin1 - это то что нужно !!!
с utf8 тоже можно справится но там у меня получилось замудреней :

>>> u'\x00\x01\xff'.encode('utf8').replace('\xc2','').replace('\xc3','')
'\x00\x01\xbf' # и тут видно что один байт преобразовался
а вот с latin1 все гладко получилось
>>> u'\x00\x01\xff'.encode('latin1')
'\x00\x01\xff'
PS
почему я говорю байт, наверное потому что каждый символ(будь то цифра или буква или еще что … ) это в конечном итоге двоичный код
и к тому же эти символы я получаю из преобразования байтов (это связано с работой скрипта) :
 
>>> unichr(int('0b10111000',2))
u'\xb8'
ну а собственно двоичный код символа :
>>> bin(ord(u'\xb8'))
'0b10111000'
PSS
и насколько я понимаю \xb8 - это хексовое представление байта 0xb8



Отредактировано (Март 3, 2012 13:12:02)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version