程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++裡Ofstream寫文件的中文問題

C++裡Ofstream寫文件的中文問題

編輯:C++入門知識

問題1:中文路徑問題導致文件打開失敗。 通常是因為在調用fstream的open方法時,系統內部調用mbstowcs_s進行文件名轉換,而mbstowcs_s依賴於程序的本地化設置(locale系列函數設置)。 程序啟動時默認設置為LC_ALL="C"。而要正確打開中文文件名的文件,需要設置為LC_ALL="chinese"。   問題2.無法輸出中文。 這個原因剛好和問題1相反!在默認的C locale下wofstream無法輸出中文!要輸出中文,又得將LC_ALL設置回來!(即LC_ALL="C") 看上去要解決這2個辦法,就要在打開文件的時候保證使用locale "C",而在寫中文的時候保證使用locale "chinese"! 如果不想頻繁的切換,那麼最好的解決辦法是把項目設置為UNICODE。以下代碼可以順利通過測試。 [cpp]   ofstream ofile("d://測試//測試.txt");     if(ofile.is_open())     {         ofile << 123456 << endl;//輸出正確       ofile << "中文1" << endl;//輸出成功       ofile << _T("中文2") << endl;//ofstream無法正確輸出此處的Unicode字符串!   }     else     {         cout<<"Open Fail!";     }        wofstream wofile("d://測試//測試w.txt");   if(wofile.is_open())     {                wofile.imbue(locale( "", locale::all ^ locale::numeric));         wofile << 123456 << endl;//輸出正確       wofile << "中文1" << endl;// wofstream無法正確輸出此處的ansi字符串!       wofile << _T("中文2") << endl;//輸出正確   }     else     {         cout<<"Open Fail!";     }     還有很關鍵的一點!注意這裡的locale( "", locale::all ^ locale::numeric)! “”表示表示使用本地語言,這裡當然相當於“chs”或者“chinese”。 locale::all表示使用該語言的所有格式設置進行編碼轉換! ^是異或,locale::numeric表示數字格式。這裡的意思是避免轉換數字格式!否則123456輸出結果會成為123,456這種形式!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved