今天早上起来就兴致脖脖地开始编写引擎的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;
}