Summary: | Python DCOP query issues with non-ASCII characters | ||
---|---|---|---|
Product: | [Unmaintained] bindings | Reporter: | Hugo Haas <hugo> |
Component: | general | Assignee: | kde-bindings |
Status: | RESOLVED UNMAINTAINED | ||
Severity: | normal | CC: | andresbajotierra |
Priority: | NOR | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Platform: | Debian testing | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | ||
Sentry Crash Report: | |||
Attachments: |
Simple test pydcop program
Same script, but converting the query string to Unicode patch for QString conversion of dcop python binding |
Description
Hugo Haas
2005-05-04 12:25:15 UTC
Created attachment 10894 [details]
Simple test pydcop program
Quite possibly a problem, I never tested the bindings with non-ASCII characters. Does it work if you use a python Unicode string? I'll try to look into this over the next week. If I add: query = query.decode('utf-8') I get an unknown method error: hugo@jibboom /tmp% python test.py é SELECT count(*) FROM tags WHERE url LIKE "%é%" <type 'unicode'> Traceback (most recent call last): File "test.py", line 9, in ? print pydcop.anyAppCalled("amarok").collection.query(query ) File "/usr/lib/python2.3/site-packages/pydcop.py", line 90, in __call__ return pcop.dcop_call( self.appname, self.objname, self.name, args ) RuntimeError: DCOP: Unknown method. I'll attach the updated test.py. Created attachment 10904 [details]
Same script, but converting the query string to Unicode
Confirmed on KDE 3.5.2 This happens on any pydcop call, if I try to use unicode strings the "DCOP: Unknown method" runtime error is raised. If I use non-unicode strings, national characters are interpreted as 8 bit ascii. This makes pydcop unusable for internacionalized projects Example: pydcop.anyAppCalled('amarok').scripts.addCustomMenuItem(u'á','b') ->Exception pydcop.anyAppCalled('amarok').scripts.addCustomMenuItem('á','b') ->wrong characters As a side note, pykde's dcop extension doesn't have this problem (it has many others, though) The problem still shows up now.
In fact, it displays UTF-8 strings as if they were iso-8859-15.
Example:
>>> import pcop
>>> pcop.dcop_call('knotify', 'default', 'notify', ('Event Foo', 'App Bar', 'é', '', '', 16, 0))
This gives a popup containing "é" instead of "é", which means that the 2 bytes of the utf-8 character are interpretated as 2 separate 8-bit characters.
Please note that my system charset is UTF-8.
KDE 3.5.4
Python 2.4.4c0 (Debian sid package 2.4.3-11)
python-dcop (Debian sid package 4:3.5.3-1+b1)
--
David Ammouial
*** This bug has been confirmed by popular vote. *** hmm ok i think i have found the problem (and solved it ;) ) my system: fedora core 6(x86_64) kdebindings-3.5.5-0.1.fc6 it is not related to pydcop.py (which is only a small wrapper around pcop.so) it is a bug in the marshal modul of pcop.so kdebindings-3.5.5/dcoppython/shell/marshal_funcs.data around line 250 there is the conversion spec for QString which looks like: type:QString %doc as str s %% marshal { if (!PyString_Check(obj)) return false; if (str) { QString s( PyString_AsString(obj) ); //<<<---bug---<<<< (*str) << s; } return true; } %% demarshal { QString s; (*str) >> s; return PyString_FromString( s.utf8().data() ); } %% at line 250 the function uses the default constructor of QString which expects a Latin-1 char* string """The encoding is assumed to be Latin-1, unless you change it using QTextCodec::setCodecForCStrings().""" <from qt docs> i think a simple change in QString s = QString::fromUtf8( PyString_AsString(obj) ); should be ok here my suggestion: type:QString %doc as str s %% marshal { if (!PyString_Check(obj)) return false; if (str) { QString s = QString::fromUtf8( PyString_AsString(obj) ); (*str) << s; } return true; } %% demarshal { QString s; (*str) >> s; return PyString_FromString( s.utf8().data() ); } %% Christian, could you upload a patch with your fix? Created attachment 18469 [details]
patch for QString conversion of dcop python binding
ok i'am sure that this patch solves the problem but there may be other conversions (e.g. type:KURL and uchar) also suffering from such problems but i couldn't trigger a bug there (not enough time to test) so i decided not to change anything there ;) i think that someone should review the whole marshal code regarding this problems but i'am happy if the patch could be applied to the next version ;) "cause i'am writing a new program using it" ;) thx Could anybody apply this patch in kde source code? Closing as DCOP is unmaintained. |