Найти - Пользователи
Полная версия: ctypes проблема с кодировкой
Начало » Python для новичков » ctypes проблема с кодировкой
1 2 3
odnochlen
nmh
Получаем тогда такое:
UnicodeEncodeError: ‘ascii’ codec can't encode characters in position 33-38: ordinal not in range(128)
УМВР. У тебя второй или третий питон?
nmh
2.7
Андрей Светлов

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

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

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)
odnochlen
У меня как раз на 2.7 работало, кто хочет - сам проверит.
nmh
Андрей Светлов
Давайте с начала.

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

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)
GaiveR
Насчёт 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;☻▬
>>>
nmh
GaiveR
Насчёт ctypes и колбека не подскажу, т.к. сам с ним не работал.
>>> print s2
&gt;☻▬
>>>
эх, не очень то это похоже на решение проблемы
nmh
Проблема решилась и она была не в Питоне.
Какой-то глюк в W7 с региональными настройками, мне подсказали, что такое иногда бывает и помог первый же рецепт - поменять в настройках виндоуз текущий язык программ, не поддерживающих Юникод на английский, а потом опять на русский. После этого s.decode начал работать.
Всем спасибо, приношу извинения за то, что отнял время.
odnochlen
Каким концом настройки винды относятся к преобразованиям с явным указанием кодировки??
nmh
odnochlen
Каким концом настройки винды относятся к преобразованиям с явным указанием кодировки??
не знаю, думаю, видимо дело в том, в каком виде данные приходят от dllки, ну не знаю короче
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