Dieter Maurer ha scritto:
jose wrote at 2005-3-18 11:44 +0100:
... I have a PythonScript like this, to list the village names in serbian language, and it works.... ... # print container.mescat('city: ') + data[0]['head'][j][5] ... If I change the script like this one, it doesn't work anymore: ... print container.mescat('city: ') + data[0]['head'][j][5] ... but I have instead the following error:
*Error Type: UnicodeDecodeError* *Error Value: 'ascii' codec can't decode byte 0xc5 in position 5: ordinal not in range(128)
Apparently "mescat('city: ')" returns unicode. This forces all strings combined with it to be converted to unicode. Python uses its "defaultencoding" for this conversion (default: "ascii").
Because your "data[0]..." contains serbian characters, they cannot be decoded using "ascii".
Your options:
* use the "unicode" function to convert "data[0]..." to unicode.
You must provide the correct encoding as second argument (otherwise, you get the same error).
* change Python's "defaultencoding" with "sys.setdefaultencoding(the_encoding)".
This is only possible at startup (usually done in "sitecustomize.py".
Unicode fanatics do not like this solution...
I would like to follow your tip by changing sitecustomize.py but I am fear that a such global configuration maybe will change some unwanted behavior in other Zope modules. Could you ensure me there are no collateral effect with other modules? jo