Уведомления

Группа в Telegram: @pythonsu

#1 Июль 27, 2012 16:31:32

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

ctypes проблема с кодировкой

nmh
Получаем тогда такое:
UnicodeEncodeError: ‘ascii’ codec can't encode characters in position 33-38: ordinal not in range(128)
УМВР. У тебя второй или третий питон?

Офлайн

#2 Июль 27, 2012 17:46:43

nmh
Зарегистрирован: 2012-07-25
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

ctypes проблема с кодировкой

2.7

Офлайн

#3 Июль 27, 2012 18:57:25

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

ctypes проблема с кодировкой

Давайте с начала.

Прототип функции:

typedef bool (*tcallback)(BYTE* pData);

Callback:

def testcallback(s):
    u = s.decode('utf8')
    print u  # или print u.encode('cp1251') если это текстовая виндовая консоль

callback= CFUNCTYPE(c_bool, c_char_p)(testcallback)



Офлайн

#4 Июль 27, 2012 19:04:59

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

ctypes проблема с кодировкой

У меня как раз на 2.7 работало, кто хочет - сам проверит.

Офлайн

#5 Июль 27, 2012 23:10:17

nmh
Зарегистрирован: 2012-07-25
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

ctypes проблема с кодировкой

Андрей Светлов
Давайте с начала.

Прототип функции:

typedef bool (*tcallback)(BYTE* pData);

Callback:

def testcallback(s):
u = s.decode('utf8')
print u # или print u.encode('cp1251') если это текстовая виндовая консоль

callback= CFUNCTYPE(c_bool, c_char_p)(testcallback)

print u => UnicodeEncodeError: ‘ascii’ codec can't encode characters in position 0-40: ordinal not in range(128)
print u.encode('cp1251') => UnicodeEncodeError: ‘ascii’ codec can't encode characters in position 0-40: ordinal not in range(128)

Офлайн

#6 Июль 28, 2012 00:44:59

GaiveR
От:
Зарегистрирован: 2011-08-13
Сообщения: 122
Репутация: +  16  -
Профиль   Отправить e-mail  

ctypes проблема с кодировкой

Насчёт ctypes и колбека не подскажу, т.к. сам с ним не работал.
Если проблема только в кодировке, то:

Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> s = u'\u733c\u7265\u6576\u5f72\u7473\u7461\u7375\u6320\u6e6f\u656e\u7463\u64
65\u223d\u7265\u6f72\u2272\ud03e\ud0a1\ud1b5\ud080\ud0b2\ud1b5\u2080\ubdd0\ub5d0
\ud020\ud0b4\ud1be\ud181\ud182\ud083\ud0bf\ud0b5\u3cbd\u732f\u7265\u6576\u5f72\u
7473\u7461\u7375>\u4c43\u4549\u6726\u6b98\uad7f\x02\u28c0\u01b6\u2f28\u01b6\x
16'
>>> type(s)
<type 'unicode'>
>>> s2 = s.encode('ascii', 'ignore')
>>> print s2
&gt;☻▬
>>>



Офлайн

#7 Июль 28, 2012 08:36:17

nmh
Зарегистрирован: 2012-07-25
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

ctypes проблема с кодировкой

GaiveR
Насчёт ctypes и колбека не подскажу, т.к. сам с ним не работал.
>>> print s2
&gt;☻▬
>>>
эх, не очень то это похоже на решение проблемы

Офлайн

#8 Июль 28, 2012 08:49:31

nmh
Зарегистрирован: 2012-07-25
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

ctypes проблема с кодировкой

Проблема решилась и она была не в Питоне.
Какой-то глюк в W7 с региональными настройками, мне подсказали, что такое иногда бывает и помог первый же рецепт - поменять в настройках виндоуз текущий язык программ, не поддерживающих Юникод на английский, а потом опять на русский. После этого s.decode начал работать.
Всем спасибо, приношу извинения за то, что отнял время.

Офлайн

#9 Июль 28, 2012 16:35:38

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

ctypes проблема с кодировкой

Каким концом настройки винды относятся к преобразованиям с явным указанием кодировки??

Офлайн

#10 Июль 28, 2012 21:32:19

nmh
Зарегистрирован: 2012-07-25
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

ctypes проблема с кодировкой

odnochlen
Каким концом настройки винды относятся к преобразованиям с явным указанием кодировки??
не знаю, думаю, видимо дело в том, в каком виде данные приходят от dllки, ну не знаю короче

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version