WriteConsoleは自動変換でない


上 : WriteConsoleW(UTF-16を出力に仮定)、下 : WriteConsoleA(MBCS = Shift-JISを出力に仮定)
UTF-8やASCIIの出力をUTF-16を仮定して解釈すると文字化けする。アルファベット(いわゆる7bit文字)を使う限りはShift-JISを仮定するAPIUTF-8な文字列を渡しても正常に見える。
というわけで、stdoutにnative-transcoderをつかうのをやめて、UTF16のtranscoderを入れれば、ちゃんと日本語が出る。

WriteConsoleを使うと、エスケープシーケンスのエミュレーションとかいろいろと余計な仕事が増えるので、printfに置き換えるとか何らかの逃げ道を模索した方がいいかもしれない。
たとえば、↑で改行がおかしいのは、本来CランタイムがやっているLF→CRLFへの変換をやってないため。