❯❯❯ cat test_open.py # -*- coding: utf-8 -*- from xml.sax.saxutils import XMLGenerator with open('/tmp/test.txt', 'w', encoding='utf-8') as f: xml = XMLGenerator(f, 'utf-8') xml.startDocument() ❯❯❯ cat test_codecs.py # -*- coding: utf-8 -*- from xml.sax.saxutils import XMLGenerator import codecs with codecs.open('/tmp/test.txt', 'w', encoding='utf-8') as f: xml = XMLGenerator(f, 'utf-8') xml.startDocument() ❯❯❯ python --version Python 3.3.0 ❯❯❯ python test_open.py ❯❯❯ python test_codecs.py ❯❯❯ ❯❯❯ python --version Python 3.3.1 ❯❯❯ python test_open.py ❯❯❯ python test_codecs.py Traceback (most recent call last): File "test_codecs.py", line 8, in xml.startDocument() File "/usr/lib/python3.3/xml/sax/saxutils.py", line 148, in startDocument self._encoding) File "/usr/lib/python3.3/codecs.py", line 699, in write return self.writer.write(data) File "/usr/lib/python3.3/codecs.py", line 355, in write data, consumed = self.encode(object, self.errors) TypeError: Can't convert 'bytes' object to str implicitly