<br><br><div class="gmail_quote">On 11 June 2012 15:21, Jim Jewett <span dir="ltr"><<a href="mailto:jimjjewett@gmail.com" target="_blank">jimjjewett@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">On Thu, Jun 7, 2012 at 5:00 PM, Mike Meyer <<a href="mailto:mwm@mired.org">mwm@mired.org</a>> wrote:<br>
> On Thu, Jun 7, 2012 at 4:48 PM, Rurpy <<a href="mailto:rurpy@yahoo.com">rurpy@yahoo.com</a>> wrote:<br>
>> I suspect the vast majority of<br>
>> programmers are interested in a language that allows<br>
>> them to *effectively* get done what they need to,<br>
<br>
</div>Agreed.<br>
<br>
The problem is that your use case gets hit by several special cases at once.<br>
<br>
Usually, you don't need to worry about encodings at all; the default<br>
is sufficient.  Obviously not the case for you.<br>
<br>
Usually, the answer is just to open a file (or stream) the way you<br>
want to.  sys.stdout is special because you don't open it.<br>
<br>
If you do want to change sys.stdout, usually the answer is to replace<br>
it with a different object.  Apparently (though I missed the reason<br>
why) that doesn't work for you, and you need to keep using the same<br>
underlying stream.<br></blockquote><div><br></div><div>I also think I missed something in this thread. At the beginning of the original thread it seemed that everyone was agreed that </div><div><br></div><div>  writer = codecs.getwriter(desired_encoding)</div>
<div>  sys.stdout = writer(sys.stdout.buffer)</div><div><br></div><div>was a reasonable solution (with the caveat that it should happen before any output is written). Is there some reason why this is not a good approach?</div>
<div><br></div><div>The only problem I know of is that under Python 2.x it becomes an error to print _already_ encoded strings (they get decoded as ascii before being encoded) but that's probably not a problem for an application that takes a disciplined approach to unicode.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
So at that point, replacing it with a wrapped version of itself<br>
probably *is* the simplest solution.<br>
<br>
The remaining problem is how to find the least bad way of doing that.<br>
Your solution does work.  Adding it as an example to the docs would<br>
probably be reasonable, but someone seems to have worked pretty hard<br>
at keeping the sys module documentation short.  I could personally<br>
support a wrap function on the sys.std* streams that took care of<br>
flushing before wrapping, but ... there is a cost, in that the API<br>
gets longer, and therefore harder to learn.<br>
<div class="im"><br>
> or applications<br>
> outside of those built for your system that have a "--encoding" type<br>
> flag?<br>
<br>
</div>There are plenty of applications with an encoding flag; I'm not sure<br>
how often it applies to sys.std*, as opposed to named files.<br>
<span class="HOEnZb"><font color="#888888"><br>
-jJ<br>
</font></span><div class="HOEnZb"><div class="h5">_______________________________________________<br>
Python-ideas mailing list<br>
<a href="mailto:Python-ideas@python.org">Python-ideas@python.org</a><br>
<a href="http://mail.python.org/mailman/listinfo/python-ideas" target="_blank">http://mail.python.org/mailman/listinfo/python-ideas</a><br>
</div></div></blockquote></div><br>