pipeline encoding
Peter Otten
__peter__ at web.de
Thu Dec 6 14:38:10 EST 2007
Tomek Toczyski wrote:
> Diez B. Roggisch:
>
>>
>> Python tries and guesses the stdout-encoding based on the terminal
>> settings. So the first print works.
>>
>> However, piping to a file means that it can't do so, because it doesn't
>> (and shouldn't) make any assumptions on the output encoding desired -
>> after all, it might be appending to a XML-file with e.g. latin1
>> encoding.
>>
>> So you need to explictely encode the unicode-object with the desired
>> encoding:
>>
>>
>> python -c "print u'\u03A9'.encode('utf-8')" > file.txt
>
> Thanks. It is a solutiona to my problem but:
>
> Are there any command line option for telling python what encoding to use
> for stdout?
>
> To be honest I have a more complicated program than the example that I
> have presented - there are many print commands inside and it is not very
> feasible for me to put .encode('utf-8') inside every print occurence.
Alternatively you can wrap stdout:
# -*- coding: utf-8 -*-
import sys
if sys.stdout.encoding is None:
import locale
import codecs
encoding = locale.getpreferredencoding() # or just "utf-8"
streamwriter = codecs.lookup(encoding).streamwriter
sys.stdout = streamwriter(sys.stdout)
print u"ähnlich üblich möglich"
More information about the Python-list
mailing list