En Thu, 22 Oct 2009 05:25:16 -0300, Lele Gaifax <l...@metapensiero.it> escribió:
"Gabriel Genellina" <gagsl-...@yahoo.com.ar> writes:

En Wed, 21 Oct 2009 06:24:55 -0300, Lele Gaifax <l...@metapensiero.it>
escribió:

"Gabriel Genellina" <gagsl-...@yahoo.com.ar> writes:

nosetest should do nothing special. You should configure the environment
so Python *knows* that your console understands utf-8.

This is the same on my virtualenv:

$ python -c "import sys; print sys.getdefaultencoding(), sys.stdout.encoding"
    ascii UTF-8
    $ python -c "print u'\xe1\xf1\xe7'"
    áñç

Good, so stdout's encoding isn't really the problem.

But look at this:

      File "/usr/lib/python2.6/unittest.py", line 730, in printErrorList
self.stream.writeln("%s: %s" % (flavour,self.getDescription(test)))
      File "/usr/lib/python2.6/unittest.py", line 665, in writeln
        if arg: self.write(arg)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe8' in position 10: ordinal not in range(128)

Who is the culprit here?

unittest, or ultimately, this bug: http://bugs.python.org/issue4947

This is not specific to nosetest; unittest in verbose mode fails in the same way.

fix: add this method to the _WritelnDecorator class in unittest.py (near line 664):

    def write(self, arg):
        if isinstance(arg, unicode):
            arg = arg.encode(self.stream.encoding, "replace")
        self.stream.write(arg)

The fact is, encodings are the real Y2k problem, and they are here to
stay for a while!

Ok, but the idea is to solve the problem (or not let it happen in the first place!), not hide it under the rug :)

--
Gabriel Genellina

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to