C ++: caracteres largos com saída incorreta?

Meu código é basicamente este:

wstring japan = L"日本";
wstring message = L"Welcome! Japan is ";

message += japan;

wprintf(message.c_str());

Estou desejando usar seqüências de caracteres largas, mas não sei como elas são produzidas, então usei o wprintf. Quando executo algo como:

./widestr | hexdump

Os pontos de código hexidecimais criam isso:

65 57 63 6c 6d 6f 21 65 4a 20 70 61 6e 61 69 20 20 73 3f 3f
e  W  c  l  m  o  !  e  J     p  a  n  a  i        s  ?  ?

Por que eles estão todos em ordem? Quero dizer, se o wprintf está errado, ainda não entendo por que ele seria produzido em uma ordem confusa tão específica!

editar: endianness ou algo assim? eles parecem girar a cada dois caracteres. Hã.

EDIT 2: Tentei usar o wcout, mas ele gera exatamente os mesmos pontos de código hexidecimais. Esquisito!

questionAnswers(1)

yourAnswerToTheQuestion