Solution:how to print wchar_t in C/C++?

該如何印出wchar_t的字串?
C 方法
wchar_t* foo = L"two bytes each character";
wprintf(L"foo =[%ls]\n", foo);
函式定義在 wchar.h 中。需要注意的是,使用的format參數形式,由印出寬字元格式參數由%s改為%ls了,雖然你可能用%s還是會把寬字元印的出來,但是寫code還是嚴謹一點好。
C++的方法
std::wstring foo(L"two bytes each character");
std::wcout &lt&lt "foo =[" &lt&lt foo &lt&lt L']' &lt&lt std::endl;


Dev-C++沒辦法用wcout,因為Dev-C++所使用的MinGW編譯器尚未完全將gcc對寬字元支援的功能port到Windows上;不過在C++中,理所當然的,你也可以使用C的方法。

此外在VC++上使用wcout,要設定locale,才不會印不出字元,關於這個問題,曾出現在Java World@TW中。

如果你有嘗試看看中文的wchar_t宣告,將會發現沒辦法使用中文,如:wchar_t* foo = L"我是寬字元";,編譯時會產生錯誤,以gcc錯誤訊息來說,是'Illegal byte sequence',我們只能利用比較抽象的Literal方式,即每個中文字的所代表的byte數值,或是利用mbstowcs函式將以char陣列宣告的中文字串,轉換為wchar_t的字元陣列。

參考資料
延伸閱讀
key words: print wide characters c c++

留言