Improving D's support of code-pages

Walter Bright newshound1 at digitalmars.com
Sat Aug 18 21:01:04 PDT 2007


Kirk McDonald wrote:
> Walter Bright wrote:
>> The problem is that whatever is sent to a file should be the same as 
>> what is sent to the screen. Consider if stdout is piped to another 
>> application - what should happen?
> 
> Let's say there's a function get_console_encoding() which returns the 
> console's current encoding. I'm simply proposing that this:
> 
> char[] str = something();
> std.stdio.writefln(str);
> 
> Should end up being equivalent to this:
> 
> std.cstream.dout.writefln(encode(str, get_console_encoding()));
> 
> So, to answer your question, if you use std.stdio.writefln, you will 
> send a string encoded in the console's default encoding to the other 
> application's stdin. This is the encoding the other application should 
> be expecting, anyway (unless it isn't; code pages are annoying like that).
> 
> In any event, if you explicitly want to output something in a particular 
> encoding, this /will/ work:
> 
> std.stdio.writefln(encode(str, whatever));
> 
> This is because encode() returns a ubyte[], and writefln should print 
> the data in ubyte[]s directly, as I suggested in my original post for 
> this precise reason.

stdio can detect whether it is being written to the console or not. 
That's fine. The problem is:

foo

will generate one kind of output.

foo | more

will do something else. This will result in a nice cascade of bug 
reports. There's also:

foo >output
cat output | more

which will do something else, too.



More information about the Digitalmars-d mailing list