Найти - Пользователи
Полная версия: ctypes проблема с кодировкой
Начало » Python для новичков » ctypes проблема с кодировкой
1 2 3
nmh
Всем привет, прошу помощи:
Пытаюсь заставить скрипт работать со сторонней DLL.
Нужно задать коллбэк-функцию с таким описанием typedef bool (*tcallback)(BYTE* pData);

Делаю так:
 def testcallback(s):
        print s
....
callback= CFUNCTYPE(c_bool, c_char_p)(testcallback)

Получаю в результате такую строку с крякозябрами: <server_status connected=“error”>Сервер РЅРµ доступен</server_status>

Должно быть: <server_status connected=“error”>Сервер не доступен</server_status>, т.е. я имею дело с юникодом, которые неправильно интерпретируется, как cp1251

Ок, делаю так:
 def testcallback(s):
        print s
....
callback= CFUNCTYPE(c_bool, c_wchar_p)(testcallback)

Получаю ошибку UnicodeEncodeError: ‘ascii’ codec can't encode characters in position 0-40: ordinal not in range(128)

Что я делаю не так?
odnochlen
А не проще ли строку декодировать (хоть и не на 100% правильно)?
nmh
odnochlen
А не проще ли строку декодировать (хоть и не на 100% правильно)?
не проще, не хочет декодировать, совсем
odnochlen
s.decode('utf8') не работает?
nmh
odnochlen
s.decode('utf8') не работает?
не работает.
odnochlen
Как ты так быстро ответил?

Какая версия питона? Выложи:
print type(s)
print repr(s)
print s.encode('hex')
nmh
odnochlen
Как ты так быстро ответил?
До этого пробовал, естественно.

odnochlen
Какая версия питона? Выложи:
print type(s)
print repr(s)
print s.encode('hex')

1)<type ‘unicode’>
2)u'\u733c\u7265\u6576\u5f72\u7473\u7461\u7375\u6320\u6e6f\u656e\u7463\u6465\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\u7473\u7461\u7375>\u4c43\u4549\u6726\u6b98\uad7f\x02\u28c0\u01b6\u2f28\u01b6\x16'
3) UnicodeEncodeError: ‘ascii’ codec can't encode characters in position 0-40: ordinal not in range(128)
Piton23
А куда происходит вывод строки? и какая ось?

Есть ли строка в начале скрипта? # -*- coding: utf-8 -*-
odnochlen
print s.encode("utf16").decode("utf8","ignore")
Там еще мусор в строке.
nmh
Piton23
А куда происходит вывод строки? и какая ось?

Есть ли строка в начале скрипта? # -*- coding: utf-8 -*-
Windows 7, сейчас вывод в python shell
Строка такая есть.

odnochlen
print s.encode(“utf16”).decode(“utf8”,“ignore”)
Получаем тогда такое:
UnicodeEncodeError: ‘ascii’ codec can't encode characters in position 33-38: ordinal not in range(128)
Короче, ни кодировать, ни декодировать эту строку питон не хочет
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