函數原形爲:char *setlocale( int category, const char *locale );
頭文件:<locale.h>
所支持的操做系統爲:ANSI, Win 95, Win NT
對於簡體中文可使用以下設置:setlocale( LC_ALL, "chs" );
爲何必定要調用setlocale呢?
由於在C/C++語言標準中定義了其運行時的字符集環境爲"C",也就是ASCII字符集的一個子集,那麼mbstowcs在工做時會將cstr中所包含的字符串看做是ASCII編碼的字符,而不認爲是一個包含有chs編碼的字符串,因此他會將每個中文拆成2個ASCII編碼進行轉換,這樣獲得的結果就是會造成4個wchar_t的字符組成的串,那麼如何纔可以讓mbstowcs正常工做呢?在調用mbstowcs進行轉換之間必須明確的告訴mbstowcs目前cstr串中包含的是chs編碼的字符串,經過setlocale( LC_ALL, "chs" )函數調用來完成,須要注意的是這個函數會改變整個應用程序的字符集編碼方式,必需要經過從新調用setlocale( LC_ALL, "C" )函數來還原,這樣就能夠保證mbstowcs在轉換時將cstr中的串看做是中文串,而且轉換成爲2個wchar_t字符,而不是4個。函數
本地化設置須要具有三個條件:
a. 語言代碼 (Language Code)
b. 國家代碼 (Country Code)
c. 編碼(Encoding)
本地名字能夠用下面這些部分來構造:
語言代碼_國家代碼.編碼 好比(zh_CN.UTF-8, en_US等)編碼
CStdioFile file
//設置語言爲中文,不然在Unicode編碼下讀出中文字符爲亂碼
char* old_locale=_strdup( setlocale(LC_CTYPE,NULL) );
setlocale( LC_CTYPE,"chs");
file.Open( strOutputFile,CStdioFile::modeRead);
file.Read();
file.Close();
setlocale( LC_CTYPE, old_locale ); //還原語言區域的設置
free( old_locale );//還原區域設定操作系統
用下面的也行code
CStdioFile file1;
file1.Open(_T( "f:\\jun\\kj66\\dev.txt "),CFile::modeRead);
CString strTem(_T( " "));
file1.ReadString(strTem);
file1.ReadString(strTem);
int n = strTem.GetLength();
TCHAR* p = strTem.GetBuffer();
char* pp = new char[n+1];
int j = 0;
while(n)
{
*(pp+j) = (char) *(p+j);
n--;
j++;
}
*(pp+j) = '\0 ';
strTem = pp;
MessageBoxW(strTem);
file1.Close(); 字符串