Black unicode magic.<br><br>It&#39;s not a big issue for me, but it probably will be for people that deal with Unicode all the time. Personally, ASCII is good enough for me. :)<br><br> Thanks for your efforts!<br><br><div class="gmail_quote">
On Wed, Jul 28, 2010 at 7:17 AM, Sean kelly <span dir="ltr">&lt;<a href="mailto:sean@invisibleduck.org" target="_blank">sean@invisibleduck.org</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">After a bit more research, the situation is a bit more complicated than I realized.  First, if I compile this C app using DMC:<br>


<br>
#include &lt;stdio.h&gt;<br>
<br>
int main()<br>
{<br>
    printf( &quot;Hall\u00E5, V\u00E4rld!&quot; );<br>
    return 0;<br>
}<br>
<br>
The output is:<br>
<br>
Hall&amp;#963;, V&amp;#931;rld!<br>
<br>
This is what I was seeing once I started messing with std.stdio.  An improvement I suppose, since it&#39;s not garbage, but the output it still incorrect if you&#39;re expecting Unicode.  After a bit of experimenting, it looks like there are two ways to output non-ASCII correctly in Windows: convert to a multi-byte string (toMBSz) or call WriteConsoleW.  Here&#39;s a test app and the associated output.  Notice how writeln() has the same output as printf(unicodeString).<br>


<br>
import std.stdio;<br>
import std.string;<br>
import std.utf;<br>
import std.windows.charset;<br>
import core.sys.windows.windows;<br>
<br>
void main()<br>
{<br>
    HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);<br>
    DWORD ignore;<br>
    wchar[] buf = (&quot;\u00E5 \u00E4&quot;w).dup;<br>
<br>
    writeln(buf);<br>
    printf(&quot;%s\n&quot;, toStringz(toUTF8(buf)));<br>
    printf(&quot;%s\n&quot;, toMBSz(toUTF8(buf), 1));<br>
    WriteConsoleW(h, buf.ptr, buf.length, &amp;ignore, null);<br>
}<br>
<br>
prints:<br>
<br>
&amp;#9500;Ñ &amp;#9500;ñ<br>
&amp;#9500;Ñ &amp;#9500;ñ<br>
å ä<br>
å ä<br>
<br>
I&#39;d think it should be enough to have std.stdio call the wide char output routine to have things display correctly, but I tried that and that&#39;s when I got the sigma.  Figuring out what&#39;s going on there will take some more work, and the ultimate fix may end up being in the DMC libraries... I really don&#39;t know.<br>


</blockquote></div><br>