[PyQt] SIP and QString

Phil Thompson phil at riverbankcomputing.com
Mon Nov 19 17:20:20 GMT 2012


On Sun, 18 Nov 2012 16:36:14 +0100, Luca Beltrame
<einar at heavensinferno.net> wrote:
> Hello,
> 
> while testing PyKDE4's modules with Python3, I noticed that the i18n()
> calls, 
> which accept const char*, are not properly handled in Python 3 (both
with
> API 
> version 1 and 2):
> 
> In [2]: from PyKDE4.kdecore import i18n
> 
> In [3]: i18n("Test")
>
---------------------------------------------------------------------------
> TypeError                                 Traceback (most recent call
last)
> <ipython-input-3-00970cb5d435> in <module>()
> ----> 1 i18n("Test")
> 
> TypeError: i18n(): argument 1 has unexpected type 'str'
> 
> It does work if I pass bytes, but that's not correct, as we're dealing
> with 
> strings here.
> 
> PyQt documentation states that char* or const char* would be acceptable
> with 
> strings (Python 3 strings). 
> 
> As the original SIP file had custom code inside, I'm attaching it here.
I 
> looked at it briefly, but I couldn't find why it didn't work.
> 
> Can anyone shed a light on this issue?

You don't specify an encoding to be used when converting char* to a string
object. It will default to that defined by %DefaultEncoding. For Python3
PyQt sets this to ASCII, so either PyKDE is using %DefaultEncoding to
change the default, or its passing "-x Py_v3" to sip which will set
defaults for Python2 rather than Python3.

Note that there is a sip bug in generating the Python3 docstring for
unencoded char* where it generates "str" rather than "bytes".

Phil


More information about the PyQt mailing list