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

文件IO遇上中文字符

編輯:C++入門知識

本來想用文件保存幾個字符串,其中還有漢字的字符串。因為是用MFC做的,所以我自然想到用MFC提供的CFile類來文件IO。但是CFile不能一條一條記錄(用回車符分隔的字符串)的讀取。於是我改用CStdioFile類,可是CStdioFile::WriteString和Readstring進行文件IO時對中文的支持不好,要麼是不能寫入中文到文件中,用麼是不能從文件中讀入中文。文本模式和二進制模式我都試了了。自己創建UNICODE編碼的文本文件也不能正常讀取。搞到半夜還是沒搞定。我怒了。於是改用C++的標准文件IO流訪問ANSI文件。再將ANSI字符串轉換到Unicode字符串。問題終於解決了。     將ANSI轉換到Unicode  (1)通過L這個宏來實現,例如: CLSIDFromProgID( L"MAPI.Folder",&clsid);  (2)通過MultiByteToWideChar函數實現轉換,例如:  char *szProgID = "MAPI.Folder";  WCHAR szWideProgID[128];  CLSID clsid;  long lLen = MultiByteToWideChar(CP_ACP,0,szProgID,strlen(szProgID),szWideProgID,sizeof(szWideProgID)); szWideProgID[lLen] = '\0';  (3)通過A2W宏來實現,例如:  USES_CONVERSION;  CLSIDFromProgID( A2W(szProgID),&clsid);    將Unicode轉換到ANSI  (1)使用WideCharToMultiByte,例如:  // 假設已經有了一個Unicode 串 wszSomeString...  char szANSIString [MAX_PATH];  WideCharToMultiByte ( CP_ACP, WC_COMPOSITECHECK, wszSomeString, -1, szANSIString, sizeof(szANSIString), NULL, NULL ); (2)使用W2A宏來實現,例如:  USES_CONVERSION;  pTemp=W2A(wszSomeString);       

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