檔案IO遇上中文字元

2022-09-23 09:42:10 字數 1137 閱讀 8267

本來想用檔案儲存幾個字串,其中還有漢字的字串。因為是用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);     

輸出中文字元

輸出中文字元 要想在圖形中輸出中文字元,需要對輸出的中文字元進行編碼。使用iconv 函式,可以把一種編碼的字元,轉換為其他編碼的字元。下面介紹在圖形中輸出中文字元的方法,建立乙個新圖形 image imagecreate 400,200 設定背景,分配顏色 bgcolor imagecoloral...

MySQL不能插入中文字元及中文字元亂碼問題

mysql的預設編碼是latin1,不支援中文,要支援中午需要把資料庫的預設編碼修改為gbk或者utf8。在安裝後mysql之後,它的配置檔案不是很給力,不知道你們的是不是,反正我的是!開始插入中文字元的時候出現如下錯誤 error 1366 hy000 incorrect string value...

MySQL不能插入中文字元及中文字元亂碼問題

mysql的預設編碼是latin1,不支援中文,要支援中午需要把資料庫的預設編碼修改為gbk或者utf8。在安裝後mysql之後,它的配置檔案不是很給力,不知道你們的是不是,反正我的是!開始插入中文字元的時候出現如下錯誤 error 1366 hy000 incorrect string value...