字符輸出與編碼集的問題。
今天早上起來就興致脖脖地開始編寫引擎的Log輸出工具。 一個小時后,基本上完功。 經(jīng)測試時才發(fā)現(xiàn),原來_tprintf在Unicode下不能輸出中文。求解未果,只好去上班了。晚上回來繼續(xù)完善早上的工作,將Log輸出做成了可以重定向的層次結(jié)構(gòu),并放入了一個可以共享的Share動態(tài)庫中。這樣就可以保持Log輸出系統(tǒng)的唯一和共享(靜態(tài)Lib中共無法共享).
用百度搜了一下這個輸出問題,突然發(fā)現(xiàn)了其中奧妙,原來Unicode需要本地化信息。
經(jīng)測試發(fā)現(xiàn)了如下規(guī)律
/*
C多 CU 非C多 非CU
stdio 1 0 1 1
iostream 1 1 0 0
可以得出
1、在多字節(jié)時,默認(C)風格下,二者都能輸出中文。
2、在多字節(jié)時,非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;
}
posted on 2010-08-19 01:19 麒麟子 閱讀(367) 評論(0) 編輯 收藏 引用 所屬分類: Programming