Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 17, 2010 15:24:02

Georg
От:
Зарегистрирован: 2010-12-17
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

cp1251 и символ с кодом 0x98

Нужно отправить двухбайтовое число в бинарном формате, кодировка cp1251, т.к. после числа нужно еще добавить текст в этой кодировке.
Перевожу число в строку как str=chr(n%256)+chr(n/256), когда один из байтов равен 0x98 возникает ошибка,
UnicodeDecodeError: ‘charmap’ codec can't decode byte 0x98 in position *: character maps to <undefined>
т.к. этот символ не определен в cp1251, как это можно обойти?
UPD. ошибка происходит после, когда я пытаюсь добавить к str строку



Отредактировано (Дек. 17, 2010 16:00:37)

Офлайн

#2 Дек. 17, 2010 15:35:33

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

cp1251 и символ с кодом 0x98

обычно для упаковки используется модуль struct



Офлайн

#3 Дек. 17, 2010 18:31:40

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

cp1251 и символ с кодом 0x98

>>> n = 0x2598
>>> s = chr(n%256) + chr(n/256) + u'hello вася'.encode('cp1251')
>>> s
'\x98%hello \xe2\xe0\xf1\xff'

Офлайн

#4 Дек. 17, 2010 18:35:42

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

cp1251 и символ с кодом 0x98

и в догонку

>>> print ord(s[0]) + ord(s[1])*0x100, s[2:].decode('cp1251')
9624 hello вася
свой протокол изобретаешь что ли?

Офлайн

#5 Дек. 20, 2010 16:52:42

Georg
От:
Зарегистрирован: 2010-12-17
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

cp1251 и символ с кодом 0x98

Проверил пример, вроде все работает, давай из программы куски вырезать чтоб собрать минимальный текст чтоб воспроизводилось, 2 раза воспроизвелось и больше не хочет, мистика какая-то, хотя в программе стабильно воспроизводится, отредактировал cp1251.py, добавил символ 0x98, тогда не глючит, решение конечно не ахти.
Да, использую свой протокол, когда протокол не сложный и нужно экономить трафик по моему нормальное решение



Отредактировано (Дек. 20, 2010 17:35:38)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version