STINNER Victor added the comment:

> Accepting of text streams in XMLGenerator should be deprecated in future 
> versions.

I agree that the following pattern is strange:

with codecs.open('/tmp/test.txt', 'w', encoding='iso-8859-1') as f:
   xml = XMLGenerator(f, encoding='iso-8859-1')

Why would I specify a codec twice? What happens if I specify two
different codecs?

with codecs.open('/tmp/test.txt', 'w', encoding='utf-8') as f:
   xml = XMLGenerator(f, encoding='iso-8859-1')

It may be simpler (and safer?) to reject text files. If you cannot
detect that f is a text file, just make it explicit in the
documentation that f must be a binary file.

2013/5/7 Serhiy Storchaka <rep...@bugs.python.org>:
>
> Serhiy Storchaka added the comment:
>
> It is not working fine on Python 3.3.0.
>
>>>> with codecs.open('/tmp/test.txt', 'w', encoding='iso-8859-1') as f:
> ...     xml = XMLGenerator(f, encoding='iso-8859-1')
> ...     xml.startDocument()
> ...     xml.startElement('root', {'attr': u'\u20ac'})
> ...     xml.endElement('root')
> ...     xml.endDocument()
> ...
> Traceback (most recent call last):
>   File "<stdin>", line 4, in <module>
>   File "/home/serhiy/py/cpython-3.3.0/Lib/xml/sax/saxutils.py", line 141, in 
> startElement
>     self._write(' %s=%s' % (name, quoteattr(value)))
>   File "/home/serhiy/py/cpython-3.3.0/Lib/xml/sax/saxutils.py", line 96, in 
> _write
>     self._out.write(text)
>   File "/home/serhiy/py/cpython-3.3.0/Lib/codecs.py", line 699, in write
>     return self.writer.write(data)
>   File "/home/serhiy/py/cpython-3.3.0/Lib/codecs.py", line 355, in write
>     data, consumed = self.encode(object, self.errors)
> UnicodeEncodeError: 'latin-1' codec can't encode character '\u20ac' in 
> position 7: ordinal not in range(256)
>
> And shouldn't. On Python 2 XMLGenerator works only with binary files and 
> "works" with text files only due implicit str->unicode converting. On Python 
> 3 working with binary files was broken. Issue1470548 restores working with 
> binary file (for which only XMLGenerator can work correctly), but for 
> backward compatibility accepting of text files was left. The problem is that 
> there no trustworthy method to determine whenever a file-like object is 
> binary or text.
>
> Accepting of text streams in XMLGenerator should be deprecated in future 
> versions.
>
> ----------
>
> _______________________________________
> Python tracker <rep...@bugs.python.org>
> <http://bugs.python.org/issue17915>
> _______________________________________

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue17915>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to