I have an application that needs to write I18N data to XML, using UTF-8 encoding, running on Python 2.7. See attached schema, and example program. I generated the foo.py wrapper as follows:
generateDS.py -qf -o foo.py --external-encoding='utf-8' --export="write" foo.xsd When I run the test program, I get the following error: Traceback (most recent call last): File "mintest.py", line 15, in <module> a.export( out, 0 ) File "/home/ctrader/src/gds-test/foo.py", line 648, in export self.exportChildren(outfile, level + 1, namespace_, name_, pretty_print=pretty_print) File "/home/ctrader/src/gds-test/foo.py", line 668, in exportChildren outfile.write('<%sfoo>%s</%sfoo>%s' % (namespace_, self.gds_format_string(quote_xml(self.foo).encode(ExternalEncoding), input_name='foo'), namespace_, eol_)) File "/home/ctrader/foo/lib/python2.7/codecs.py", line 691, in write return self.writer.write(data) File "/home/ctrader/foo/lib/python2.7/codecs.py", line 351, in write data, consumed = self.encode(object, self.errors) UnicodeDecodeError: 'ascii' codec can't decode byte 0xd9 in position 5: ordinal not in range(128) After a long debugging session, I determined that the problem is that the code that generateDS generates for the export methods uses regular strings, not unicode strings, for its constants. When you concatenate 'aaa' + X + 'ccc', it works fine, as long as X is a regular string, or a unicode string containing only ASCII characters. When X isn't ASCII, you get the exception I noted above. For my short-term problem, I went through the entire generateDS.py program and converted every statement that emits code for the wrapper classes to emit unicode constants instead of string constants, and got rid of the calls to gds_format_string(), but that's not a good long-term fix. Can anyone suggest a better solution? Other problems observed: - gDS doesn't generate the <?xml ?> directive at the start of the export. - gDS does not deal well with complex namespaces in schemas. I worked around both of those by writing my data to a string, and then massaging the string before writing the result to a file. Again, it works in the short-term, but isn't a long-term solution. - Craig -
foo.xsd
Description: Binary data
mintest.py
Description: Binary data
------------------------------------------------------------------------------ Learn the latest--Visual Studio 2012, SharePoint 2013, SQL 2012, more! Discover the easy way to master current and previous Microsoft technologies and advance your career. Get an incredible 1,500+ hours of step-by-step tutorial videos with LearnDevNow. Subscribe today and save! http://pubads.g.doubleclick.net/gampad/clk?id=58040911&iu=/4140/ostg.clktrk
_______________________________________________ generateds-users mailing list generateds-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/generateds-users