On Tuesday, November 19, 2013 5:22:36 PM UTC, Thomas Heller wrote: > Am 19.11.2013 17:58, schrieb Mark Summerfield: > > > Hi, > > > > > > I am using ctypes to access a function in a DLL using Python 3.3 > > > 32-bit on Windows 7 64-bit: > > > > > > dplGetPageText = dpl.DPLGetPageText dplGetPageText.argtypes = > > > (ctypes.c_int, ctypes.c_int) dplGetPageText.restype = > > > ctypes.c_wchar_p > > > > > > Python returns this as a str with the raw bytes already decoded. > > > > > > Unfortunately, when the returned text contains some special > > > characters (e.g. © or fi) it is not encoded correctly. This may be a > > > problem with Windows or with ctypes or with the library I'm using; or > > > of course, it could be my own mistake. > > > > > > To find out, I'd like to change the restype to give me the raw bytes > > > so that I can view them and if necessary decode them myself. > > > > > > Can anyone tell me how to change the restype to get the bytes? > > > > ctypes on Python 2.7 has the set_conversion_mode(coding, errors) > > which could be used to change the way c_wchar_p is converted > > from/to Python strings. > > Unfortunately it seems to be gone in Python 3.3. > > > > However, you can set restype to POINTER(c_char) and then > > index the result: > > > > result = dplGetPageText(...) > > print(result[0], result[1], result[2]) > > > > Thomas
That worked well. I also tried POINTER(c_wchar) which also worked (but in a different way). Now I can see the raw bytes and decode them how I like. Thanks! -- https://mail.python.org/mailman/listinfo/python-list