今天早上起來就興致脖脖地開始編寫引擎的Log輸出工具。 一個小時后,基本上完功。 經測試時才發現,原來_tprintf在Unicode下不能輸出中文。求解未果,只好去上班了。
晚上回來繼續完善早上的工作,將Log輸出做成了可以重定向的層次結構,并放入了一個可以共享的Share動態庫中。這樣就可以保持Log輸出系統的唯一和共享(靜態Lib中共無法共享).
用百度搜了一下這個輸出問題,突然發現了其中奧妙,原來Unicode需要本地化信息。
經測試發現了如下規律
/*
C多 CU 非C多 非CU
stdio 1 0 1 1
iostream 1 1 0 0可以得出
1、在多字節時,默認(C)風格下,二者都能輸出中文。
2、在多字節時,非C風格下,cout不能輸出中文
3、在U時,默認C風格下,print不能輸出中文
4、在U時,非C風格下,cout不能輸出中文由此可知,要在C風格下,iostream才能輸出中文。
而printf只有在C風格的Unicode下才不能輸出中文,其它均可。
*/
測試代碼如下
#include <iostream>
#include <tchar.h>
#include <locale>
int _tmain(int argc, _TCHAR* argv[])
{
#ifdef _UNICODE
_tsetlocale(LC_CTYPE,TEXT(""));
#endif
_tprintf(TEXT("a在哪里啊\n"));
#ifdef _UNICODE
_tsetlocale(LC_CTYPE,TEXT("C"));
#endif
#ifdef _UNICODE
std::wcout<<"d在哪里啊"<<std::endl;
#else
std::cout<<"d在哪里啊"<<std::endl;
#endif
getchar();
return 0;
}