Solution:how to print wchar_t in C/C++?
該如何印出wchar_t的字串?
C 方法
C++的方法
Dev-C++沒辦法用wcout,因為Dev-C++所使用的MinGW編譯器尚未完全將gcc對寬字元支援的功能port到Windows上;不過在C++中,理所當然的,你也可以使用C的方法。
此外在VC++上使用wcout,要設定locale,才不會印不出字元,關於這個問題,曾出現在Java World@TW中。
如果你有嘗試看看中文的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 << "foo =[" << foo << L']' << 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的字元陣列。
參考資料
- Thinking more...用 wprintf 輸出 string - 樂多日誌
- Re: How to print out a wide character string from a C/C++ program?
- MSDN:wstring (Standard C++ Library)
- Formatted Output Functions - The GNU C Library
- G11N Development(1) --- Unicode Basic && wxxx function - 小明思考 - C++博客
- 深入 printf / wprintf / console下的unicode output - 小明思考 - C++博客
- MSDN:setlocale, _wsetlocale (CRT)
- MSDN:VC++技巧與技術-字串
- ISO C Amendment 1 (MSE)
- Dev-C++ wide-character have not yet been fully ported to Windows - 阿牛滴部落格
留言