tis 2007-05-29 klockan 09:05 +0200 skrev "Martin v. Lo"wis": > Yes, when writing to a file, you need to define an encoding, e.g. > > self.file.write(data.encode("utf-8")) > > You can use codecs.open() instead of open(), > so that you can just use self.file.write(data)
If I for some reason can't open the object myself or needs encoding on other file-like objects, I think the following wrapper function is of use (it essentially does what codecs.open() does but takes a file-object instead of a filename): def filewrapper(f, encoding=None, errors='strict'): if encoding is None: return f info = codecs.lookup(encoding) srw = codecs.StreamReaderWriter(f, info.streamreader, info.streamwriter, errors) # Add attributes to simplify introspection srw.encoding = encoding return srw I find this especially useful for changing how stdout and friends does it's encoding, e.g: >>> sys.stdout = filewrapper(sys.stdout, 'utf-8') >>> print u"åäö \N{GREEK CAPITAL LETTER DELTA}" Useful if you don't want to append .encode() to everything you print out that potentially can contain non-ascii letters. /Ragnar -- http://mail.python.org/mailman/listinfo/python-list