Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 15, 2009 08:12:47

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

как сформировать utf-8 сообщение если оно приходт по частям

у меня по сокету прилетает длинное сообщение в utf-8 (русский язык), но иногда вылетает “###result in error code page”, я думаю из-за того что иногда приходящий пакет режет двух-байтный симовол по полам, из за этого питон не может сформировать входящее сообщение ы утф8.

            while 1:
buf = s.recv(16384)

if not len(buf):
break

try:
print unicode(buf,'utf-8'),
except:
print '###result in error code page'
как быть? нужно выдавать сообщение после каждого приема.

я попробовал сделать так, если последний символ в буфере > 127 (т.е. начался 2=х байтный символ ), то перекинуть этот символ в начало следующего пришедшего сообщения, но этот вариант не работает
            z = ''
while 1:
buf = s.recv(16384)

if not len(buf):
break

if z:
buf = z + buf
z = ''
if buf[-1] > 127:
z = buf[-1]
buf = buf[:-1]

try:
print unicode(buf,'utf-8'),
except:
print '###result in error code page'

Отредактировано (Сен. 15, 2009 08:38:32)

Офлайн

#2 Сен. 15, 2009 19:08:38

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

как сформировать utf-8 сообщение если оно приходт по частям

Может задействовать хоть какой-то протокол обмена данными? Или свой придумать на крайняк. Иначе тут не разберёшь где одно сообщение заканчивается и где второе начинается.



Офлайн

#3 Сен. 15, 2009 21:25:26

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

как сформировать utf-8 сообщение если оно приходт по частям

Офлайн

#4 Сен. 15, 2009 22:00:18

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

как сформировать utf-8 сообщение если оно приходт по частям

poltergeist
Может задействовать хоть какой-то протокол обмена данными? Или свой придумать на крайняк. Иначе тут не разберёшь где одно сообщение заканчивается и где второе начинается.
передается единственное сообщение, только по кускам, но на удаленной машине оно формируется постепенно.

вообщем выкрутился так: если питон выдал ексепшен - не смог преобразовать в утф8, то я жду следующий пакет и добавляю к нему текущий и по новой преобразовываю …

Офлайн

#5 Сен. 15, 2009 22:02:34

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

как сформировать utf-8 сообщение если оно приходт по частям

а вообще можно попробовать сделать как в первом посте, только при получении пакета разбивать его на байты, и собирать перед преобразованием в утф8, перекинув последний байт если он - начало 2-х байтного символа

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version