版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)用第一智慧密集用VC+編程實(shí)現(xiàn)轉(zhuǎn)換文本文件的字符編碼馬創(chuàng)新摘要:介紹了使用VC+實(shí)現(xiàn)轉(zhuǎn)換文本文件字符編碼的方法,可使文本文件的字符編碼在Unicode、Big5、UTF8、GBK等編碼之間實(shí)現(xiàn)自由轉(zhuǎn)換。關(guān)鍵詞:VC+;字符編碼;Unicode;Big5;UTF8;GBK件”中選擇或者直接輸入需要轉(zhuǎn)化的文件路徑及其名稱,然后根據(jù)需要點(diǎn)擊界面中間的命令按鈕即可。所生成的新文件名稱會(huì)在界面最下方的編輯框中顯示出來(lái)。1引言世界上存在多種文字,在用計(jì)算機(jī)處理文字信息時(shí),為了節(jié)省存儲(chǔ)空間、提高處理速度,一些國(guó)家和地區(qū)為文字制定了相應(yīng)的字符集,有的一種文字存在多種字符集。字符集可以以表格形式描述為字符到單
2、字節(jié)值或多字節(jié)值的映射。ASCII碼字符集是所有多字節(jié)字符集的一個(gè)子集;GB2312字符集是中國(guó)大陸制定的,容納了6763個(gè)簡(jiǎn)體漢字;Big5字符集是臺(tái)灣地區(qū)制定的,容納了13053個(gè)繁體字;GBK字符集GB2312的擴(kuò)展集,它兼容GB2312,所以也兼容ASCII,它能容納二萬(wàn)多漢字;Unicode字符集設(shè)計(jì)思想是要它容納全世界所有文字,它是國(guó)際通用的字符集。代碼頁(yè)就是指一個(gè)字符集,其中包含數(shù)字、標(biāo)點(diǎn)符號(hào)及其他字形。在Windows系列操作系統(tǒng)中,不同的語(yǔ)言和locale設(shè)置會(huì)調(diào)用不同的代碼頁(yè)。例如英語(yǔ)和大多數(shù)歐洲語(yǔ)言使用ANSI代碼頁(yè)1252,而中國(guó)大陸和新加坡使用代碼頁(yè)圖1字符編碼轉(zhuǎn)化大
3、全的程序界面936(GBK字符集),中國(guó)臺(tái)灣地區(qū)使用代碼頁(yè)950(Big5字符集)。程序啟動(dòng)時(shí),自動(dòng)將多字節(jié)代碼頁(yè)設(shè)置為操作系統(tǒng)默認(rèn)的代碼頁(yè)。運(yùn)行庫(kù)中大多數(shù)多字節(jié)字符函數(shù)的行為,與當(dāng)前多字節(jié)代碼頁(yè)設(shè)置有關(guān)。比如記事本程序(notepad.exe)在打開一個(gè)ANSI編碼的文本時(shí),會(huì)根據(jù)操作系統(tǒng)的中的設(shè)置來(lái)決定使用哪個(gè)代碼頁(yè)。這個(gè)設(shè)置在控制面板區(qū)域和語(yǔ)言選項(xiàng)-高級(jí)選項(xiàng)卡-Languagefornon-Unicode3設(shè)計(jì)思路由于字符編碼之間沒(méi)有對(duì)應(yīng)的規(guī)律,如果要把某個(gè)文本文件從一種字符編碼轉(zhuǎn)為由另一種字符編碼來(lái)存儲(chǔ),一般使用查表映射的方式。在Windows系列操作系統(tǒng)中,使用VC+編程時(shí),這種字符
4、映射不需要由程序員來(lái)編寫,可以使用Windows操作系統(tǒng)提供的兩個(gè)函數(shù)MultiByteToWideChar、programs設(shè)置中,如果一個(gè)文本原本是用代碼頁(yè)936(簡(jiǎn)體中文)編碼的,而操作系統(tǒng)在此處的設(shè)置為Chinese(Taiwan),用記事本打開時(shí)將會(huì)顯示亂碼,將設(shè)置改為Chinese(PRC)就可正常顯示。由于Unicode是國(guó)際通用的寬字節(jié)字符集,所以用Unicode編碼的文本文件不受此處設(shè)置的影響,都可以正常打開。WideCharToMultiByte來(lái)實(shí)現(xiàn)。函數(shù)MultiByteToWideChar可以把多字節(jié)字符串轉(zhuǎn)化為寬字節(jié)字符串,寬字節(jié)編碼只有Unicode,這是確定無(wú)疑
5、的,無(wú)需特別指出,而多字節(jié)編碼種類卻有很多,使用這個(gè)函數(shù)可以把全部的多字節(jié)編碼都能分別轉(zhuǎn)化為寬字節(jié)編碼。它的第一個(gè)參數(shù)是指與多字節(jié)字符相關(guān)的代碼頁(yè),它的設(shè)置可以是非常具體的,如:936(表示簡(jiǎn)體中文)、950(表示繁體中文)、1361(表示韓國(guó)語(yǔ))等;也可以相對(duì)的、由操作系統(tǒng)或當(dāng)前程序所處環(huán)境決定的,如CP_ACP、CP_OEMCP、CP_THREAD_ACP等。比如下面函數(shù)就可以把簡(jiǎn)體中文編碼的文本轉(zhuǎn)化為2功能及特點(diǎn)字符編碼轉(zhuǎn)化程序的界面如圖1所示。使用這個(gè)程序轉(zhuǎn)化文本文件的字符編碼時(shí),只要在“文件名”前的“編輯瀏覽控162012.09電腦編程技巧與維護(hù)PROGRAMLANGUAGEUnic
6、ode編碼:wchar_t*GBKToUnicode(char*szAnsi)intwcsLen=:MultiByteToWideChar(936,NULL,szAnsi,strlen(szAnsi),NULL,0);wchar_t*wszString=newwchar_twcsLen+1;:MultiByteToWideChar(936,NULL,szAnsi,strlen(szAnsi),wszString,wcsLen);wszStringwcsLen='0'returnwszString;如果要把繁體中文編碼的文本轉(zhuǎn)化為Unicode編碼,只要把上面代碼中的MultiB
7、yteToWideChar函數(shù)的第一個(gè)參數(shù)改為控件類型ID命令按鈕IDC_BUTTON6命令按鈕IDC_BUTTON7命令按鈕IDC_BUTTON8命令按鈕IDC_BUTTON9命令按鈕IDC_BUTTON10命令按鈕IDC_BUTTON11命令按鈕IDC_BUTTON12靜態(tài)文本IDC_STATIC2編輯控件IDC_EDIT1控件標(biāo)題相關(guān)變量作用編程語(yǔ)言UTF8轉(zhuǎn)為UnicodeGBK轉(zhuǎn)為UTF8GBK轉(zhuǎn)為Big5Big5轉(zhuǎn)為GBKBig5轉(zhuǎn)為UTF8UTF8轉(zhuǎn)為Big5UTF8轉(zhuǎn)為GBK生成的新文件名:由UTF8轉(zhuǎn)為Unicode編碼由GBK轉(zhuǎn)為UTF8編碼由GBK轉(zhuǎn)為Big5編碼由Big
8、5轉(zhuǎn)為GBK編碼由Big5轉(zhuǎn)為UTF8編碼由UTF8轉(zhuǎn)為Big5編碼由UTF8轉(zhuǎn)為GBK編碼950就可以。依次類推,如果要把UTF8編碼的文本轉(zhuǎn)化為Unicode編碼,只要把上面代碼中的MultiByteToWideChar函數(shù)的第一個(gè)參數(shù)改為CP_UTF8就可以。函數(shù)WideCharToMultiByte的功能是把寬字節(jié)字符串轉(zhuǎn)化為多字節(jié)字符串,它的第一個(gè)參數(shù)也是指與多字節(jié)字符相關(guān)的代碼頁(yè),用法與MultiByteToWideChar基本相同。m_newFileName(CString類型)43編寫用于調(diào)用的函數(shù)代碼編寫下列7段函數(shù)代碼:(1)函數(shù)UnicodeToGBK:功能是把Unico
9、de編碼的寬字符串轉(zhuǎn)化為GBK編碼的多字節(jié)字符串:4編程實(shí)現(xiàn)啟動(dòng)VisualStudio2010,在“文件”菜單上,指向“新41新建項(xiàng)目建”,然后單擊“項(xiàng)目”打開“新建項(xiàng)目”對(duì)話框。從VisualC+項(xiàng)目列表中選擇“MFC應(yīng)用程序”,在“名稱”框中鍵入“changeCharactorSet”,然后單擊“確定”按鈕。在“MFC應(yīng)用程序向?qū)А钡摹皯?yīng)用程序類型”中,選擇“基于對(duì)話框”,然后不停地點(diǎn)擊“下一步”,最后點(diǎn)擊“完成”即可。本項(xiàng)目的字符集要設(shè)置為“使用Unicode字符集”。42在對(duì)話框中放置控件在對(duì)話框中放置如圖1所示的各個(gè)控件,在表1中,按照從左到右,從上到下的順序?qū)@些控件的類型、ID
10、、標(biāo)題、相關(guān)變量、作用等作了具體的介紹。表1控件類型ID靜態(tài)文本IDC_STATIC1編輯瀏覽IDC_MF控件char*UnicodeToGBK(wchar_t*wszString)intansiLen=:WideCharToMultiByte(936,NULL,wszString,wcslen(wszString),NULL,0,NULL,NULL);char*szAnsi=newcharansiLen+1;:WideCharToMultiByte(936,NULL,wszString,wcslen(wszString),szAnsi,ansiLen,NULL,NULL);szAnsians
11、iLen='0'returnszAnsi;(2)函數(shù)UnicodeToBig5;功能是把Unicode編碼的寬字節(jié)符串轉(zhuǎn)化為Big5編碼的多字節(jié)字符串;只要把函數(shù)UnicodeToGBK的函數(shù)體中所調(diào)用的函數(shù)WideCharToMultiByte的第一個(gè)參數(shù)由936改為950即可。如下所示:各個(gè)控件的類型、ID、標(biāo)題、相關(guān)變量、作用控件標(biāo)題文件名:相關(guān)變量作用提示指定一個(gè)文本文件,將m_fileName(CString類型)轉(zhuǎn)換其字符編碼CEDITBROWSE1Unicode轉(zhuǎn)為GBKUnicode轉(zhuǎn)為Big5Unicode轉(zhuǎn)為UTF8GBK轉(zhuǎn)為UnicodeBig5轉(zhuǎn)為Uni
12、code命令按鈕IDC_BUTTON1命令按鈕IDC_BUTTON2命令按鈕IDC_BUTTON3命令按鈕IDC_BUTTON4命令按鈕IDC_BUTTON5把由Unicode編碼的文本轉(zhuǎn)化為由GBK編碼由Unicode轉(zhuǎn)為Big5編碼由Unicode轉(zhuǎn)為UTF8編碼由GBK轉(zhuǎn)為Unicode編碼由Big5轉(zhuǎn)為Unicode編碼char*UnicodeToBig5(wchar_t*wszString)intansiLen=:WideCharToMultiByte(950,NULL,wszString,wcslen(wszString),NULL,0,NULL,NULL);char*szAnsi
13、=newcharansiLen+1;:WideCharToMultiByte(950,NULL,wszString,wcslen(wszString),szAnsi,ansiLen,NULL,NULL);szAnsiansiLen='0'returnszAnsi;(3)函數(shù)UnicodeToUtf8;功能是把Unicode編碼的寬字節(jié)符串轉(zhuǎn)化為UTF8編碼的多字節(jié)字符串。如下所示:2012.09電腦編程技巧與維護(hù)17實(shí)用第一智慧密集char*UnicodeToUtf8(wchar_t*wszString)intansiLen=:WideCharToMultiByte(CP_UT
14、F8,NULL,wszString,wcslen(wszString),NULL,0,NULL,NULL);char*szAnsi=newcharansiLen+1;:WideCharToMultiByte(CP_UTF8,NULL,wszString,wcslen(wszString),szAnsi,ansiLen,NULL,NULL);szAnsiansiLen='0'returnszAnsi;(4)函數(shù)Big5ToUnicode;功能是把Big5編碼的多字節(jié)字符串轉(zhuǎn)化為Unicode編碼的寬字符串。newFileName=newFileName.Mid(0,newFile
15、Name.ReverseFind('.');newFileName=newFileName+_T("(")+sTime+_T(").txt");returnnewFileName;44消息:添加各個(gè)命令按鈕的單擊響應(yīng)消息(1)標(biāo)題為“Unicode轉(zhuǎn)為GBK”命令按鈕的單擊響應(yīng)wchar_t*big5ToUnicode(char*szAnsi)intwcsLen=:MultiByteToWideChar(950,NULL,szAnsi,strlen(szAnsi),NULL,0);wchar_t*wszString=newwchar_tw
16、csLen+1;:MultiByteToWideChar(950,NULL,szAnsi,strlen(szAnsi),wszString,wcsLen);wszStringwcsLen='0'returnwszString;(5)函數(shù)UTF8ToUnicode;功能是把UTF8編碼的多字節(jié)字符串轉(zhuǎn)化為Unicode編碼的寬字符串。只要把函數(shù)Big5ToUnicode的函數(shù)體中所調(diào)用的函數(shù)MultiByteToWideChar的第一個(gè)參數(shù)由950改為CP_UTF8即可,如下所示:wchar_t*UTF8ToUnicode(char*szAnsi)intwcsLen=:Multi
17、ByteToWideChar(CP_UTF8,NULL,szAnsi,strlen(szAnsi),NULL,0);wchar_t*wszString=newwchar_twcsLen+1;:MultiByteToWideChar(CP_UTF8,NULL,szAnsi,strlen(szAnsi),wszString,wcsLen);wszStringwcsLen='0'returnwszString;(6)函數(shù)GBKToUnicode;功能是把GBK編碼的多字節(jié)字符串轉(zhuǎn)化為Unicode編碼的寬字符串。(7)編寫一個(gè)函數(shù),用于改變文件名稱,它所生成的新文件名稱是由舊文件名稱
18、加上當(dāng)前時(shí)間所組成。UpdateData(true);CStringnewFile=changeFileName(m_fileName);FILE*stream,*out;wchar_tline8000;char*cline;out=_wfopen(newFile,_T("wt");if(stream=_wfopen(m_fileName,_T("rb")!=NULL)while(!feof(stream)fgetws(line,8000,stream);cline=UnicodeToGBK(line);fputs(cline,out);fclose(s
19、tream);fclose(out);m_newFileName=newFile;UpdateData(false);(2)標(biāo)題為“Unicode轉(zhuǎn)為Big5”命令按鈕的單擊響應(yīng)消息代碼與“Unicode轉(zhuǎn)為GBK”的單擊響應(yīng)消息代碼基本相同,只要把其中所調(diào)用的函數(shù)UnicodeToGBK改為UnicodeToBig5即可。(3)標(biāo)題為“Unicode轉(zhuǎn)為UTF8”命令按鈕的單擊響應(yīng)消息代碼與“Unicode轉(zhuǎn)為GBK”的單擊響應(yīng)消息代碼基本相同,只要把其中所調(diào)用的函數(shù)UnicodeToGBK改為UnicodeToUtf8即可。(4)消息:標(biāo)題為“GBK轉(zhuǎn)為Unicode”命令按鈕的單擊響應(yīng)C
20、StringchangeFileName(constCString&oldFileName)time_tt;time(&t);CStringsTime=_tctime(&t);sTime.Replace('','_');sTime.Replace(':','-');sTime=sTime.Mid(4,15);CStringnewFileName=oldFileName;UpdateData(true);CStringnewFile=changeFileName(m_fileName);FILE*stream
21、,*out;charline8000;wchar_t*wline;out=_wfopen(newFile,_T("wb");if(stream=_wfopen(m_fileName,_T("rt")!=NULL)while(!feof(stream)182012.09電腦編程技巧與維護(hù)PROGRAMLANGUAGEfgets(line,8000,stream);wline=GBKToUnicode(line);fputws(wline,out);fclose(stream);fclose(out);m_newFileName=newFile;Update
22、Data(false);(5)標(biāo)題為“Big5轉(zhuǎn)為Unicode”命令按鈕的單擊響應(yīng)消息代碼與“GBK轉(zhuǎn)為Unicode”的單擊響應(yīng)消息代碼基本相同,只要把其中所調(diào)用的函數(shù)GBKToUnicode改為編程語(yǔ)言代碼與“GBK轉(zhuǎn)為UTF8”的單擊響應(yīng)消息代碼基本相同,只要把其中所調(diào)用的函數(shù)GBKToUnicode改為Big5ToUnicode,把UnicodeToUtf8改為UnicodeToGBK即可。(10)標(biāo)題為“Big5轉(zhuǎn)為UTF8”命令按鈕的單擊響應(yīng)消息代碼與“GBK轉(zhuǎn)為UTF8”的單擊響應(yīng)消息代碼基本相同,只要把其中所調(diào)用的函數(shù)GBKToUnicode改為Big5ToUnicode即可
23、。(11)標(biāo)題為“UTF8轉(zhuǎn)為Big5”命令按鈕的單擊響應(yīng)消息代碼與“GBK轉(zhuǎn)為UTF8”的單擊響應(yīng)消息代碼基本相同,只要把其中所調(diào)用的函數(shù)GBKToUnicode改為UTF8ToUnicode,把UnicodeToUtf8改為UnicodeToBig5即可。(12)標(biāo)題為“UTF8轉(zhuǎn)為GBK”命令按鈕的單擊響應(yīng)消息代碼與“GBK轉(zhuǎn)為UTF8”的單擊響應(yīng)消息代碼基本相同,只要把其中所調(diào)用的函數(shù)GBKToUnicode改為UTF8ToUnicode,把UnicodeToUtf8改為UnicodeToGBK即可。Big5ToUnicode即可。(6)標(biāo)題為“UTF8轉(zhuǎn)為Unicode”命令按鈕的單擊響應(yīng)消息代碼與“GBK轉(zhuǎn)為Unicode”的單擊響應(yīng)消息代碼基本相同,只要把其中所調(diào)用的函數(shù)GBKToUnicode改為UTF8ToUnicode即可。(7)多字節(jié)字符編碼之間相互轉(zhuǎn)化時(shí)需要以Unicode編碼作為中介。標(biāo)題為“GBK轉(zhuǎn)為UTF8”命令按鈕的單擊響應(yīng)消息:5結(jié)語(yǔ)介紹了使用VC+編程實(shí)現(xiàn)轉(zhuǎn)換文本文件字符編碼的方法,可使文本文件的字符編碼在Unicode、Big5、UTF8、GBK等編碼之間實(shí)現(xiàn)自由轉(zhuǎn)換。所有代碼均在VC+2010下通過(guò)測(cè)試,實(shí)驗(yàn)證明該方法簡(jiǎn)易實(shí)用,代碼的可移植性很強(qiáng)。經(jīng)過(guò)編碼轉(zhuǎn)換后的有些文件
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度互聯(lián)網(wǎng)企業(yè)派遣員工網(wǎng)絡(luò)安全合同3篇
- 2025年全新公對(duì)公借款合同模板下載及服務(wù)支持10篇
- 二零二五年度體育館租賃合同附體育賽事推廣及贊助招商服務(wù)
- 2025版智能工廠生產(chǎn)線改造施工合同4篇
- 二零二五年度新能源產(chǎn)品銷售代理合作合同范本3篇
- Bobath技術(shù)閆秀麗講解
- 2025年度個(gè)人藝術(shù)品租賃借款合同范本及租賃期限約定
- 2025年室內(nèi)墻面批白工程售后服務(wù)合同
- 二零二五年度戶外廣告照明外接電源供應(yīng)合同
- 2025年度個(gè)人房屋抵押貸款擔(dān)保及養(yǎng)老保障服務(wù)合同
- 道路瀝青工程施工方案
- 2025年度正規(guī)離婚協(xié)議書電子版下載服務(wù)
- 《田口方法的導(dǎo)入》課件
- 內(nèi)陸?zhàn)B殖與水產(chǎn)品市場(chǎng)營(yíng)銷策略考核試卷
- 電力電纜工程施工組織設(shè)計(jì)
- 醫(yī)生給病人免責(zé)協(xié)議書(2篇)
- 票據(jù)業(yè)務(wù)居間合同模板
- 高中物理選擇性必修2教材習(xí)題答案
- 應(yīng)急預(yù)案評(píng)分標(biāo)準(zhǔn)表
- “網(wǎng)絡(luò)安全課件:高校教師網(wǎng)絡(luò)安全與信息化素養(yǎng)培訓(xùn)”
- 鋰離子電池健康評(píng)估及剩余使用壽命預(yù)測(cè)方法研究
評(píng)論
0/150
提交評(píng)論