Найти - Пользователи
Полная версия: socket send не шлет unicode
Начало » Python для экспертов » socket send не шлет unicode
1
sonniy
у меня есть вот такая строка 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) ?

ЗЫ
прошу прощения , я похоже не в том разделе отпостил :)
Андрей Светлов
.encode('utf8') например
py.user.next
>>> u'\x00\x01\xff'.encode('utf-8')
'\x00\x01\xc3\xbf'
>>> u'\x00\x01\xff'.encode('latin1')
'\x00\x01\xff'
>>>
sonniy
Спасибо!!!
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
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