最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

VC中實(shí)現(xiàn)GB2312、BIG5、Unicode編碼轉(zhuǎn)換的方法

 更新時(shí)間:2014年07月21日 17:28:11   投稿:shichen2014  
這篇文章主要介紹了VC中實(shí)現(xiàn)GB2312、BIG5、Unicode編碼轉(zhuǎn)換的方法,該功能非常實(shí)用,需要的朋友可以參考下

本文主要以實(shí)例形式討論了VC編譯環(huán)境下,實(shí)現(xiàn)字符串和文件編碼方式轉(zhuǎn)換的方法,在linux下請(qǐng)使用Strconv來實(shí)現(xiàn)。具體方法如下:

一、文件編碼格式轉(zhuǎn)換

//GB2312 編碼文件轉(zhuǎn)換成 Unicode:
if((file_handle = fopen(filenam,"rb")) != NULL)
{
    //從GB2312源文件以二進(jìn)制的方式讀取buffer
    numread = fread(str_buf_pool,sizeof(char),POOL_BUFF_SIZE,file_handle);
    fclose(file_handle);
   //GB2312文件buffer轉(zhuǎn)換成UNICODE
   nLen  =MultiByteToWideChar(CP_ACP,0,str_buf_pool,-1,NULL,0); 
   MultiByteToWideChar(CP_ACP,0,str_buf_pool,-1,(LPWSTR)str_unicode_buf_pool,nLen);
   //組裝UNICODE Little Endian編碼文件文件頭標(biāo)示符"0xFF 0xFE" 
   //備注:UNICODE Big Endian編碼文件文件頭標(biāo)示符"0xFF 0xFE" 
   //Little Endian與Big Endian編碼差異此處不詳述
   unicode_little_file_header[0]=0xFF;
   unicode_little_file_header[1]=0xFE;
   //存儲(chǔ)目標(biāo)文件
   if((file_handle=fopen(filenewname,"wb+")) != NULL)
   {
   fwrite(unicode_little_file_header,sizeof(char),2,file_handle);
   numwrite = fwrite(str_unicode_buf_pool,sizeof(LPWSTR),nLen,file_handle);
   fclose(file_handle);
   }
}

二、字符串編碼格式轉(zhuǎn)換

//GB2312 轉(zhuǎn)換成 Unicode:
wchar_t* GB2312ToUnicode(const char* szGBString)
{
    UINT nCodePage = 936; //GB2312
    int nLength=MultiByteToWideChar(nCodePage,0,szGBString,-1,NULL,0);
    wchar_t* pBuffer = new wchar_t[nLength+1];
    MultiByteToWideChar(nCodePage,0,szGBString,-1,pBuffer,nLength);
    pBuffer[nLength]=0;
    return pBuffer;
}
//BIG5 轉(zhuǎn)換成 Unicode:
wchar_t* BIG5ToUnicode(const char* szBIG5String)
{
    UINT nCodePage = 950; //BIG5
    int nLength=MultiByteToWideChar(nCodePage,0,szBIG5String,-1,NULL,0);
    wchar_t* pBuffer = new wchar_t[nLength+1];
    MultiByteToWideChar(nCodePage,0,szBIG5String,-1,pBuffer,nLength);
    pBuffer[nLength]=0;
    return pBuffer;
}
//Unicode 轉(zhuǎn)換成 GB2312:
char* UnicodeToGB2312(const wchar_t* szUnicodeString)
{
    UINT nCodePage = 936; //GB2312
    int nLength=WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,NULL,0,NULL,NULL);
    char* pBuffer=new char[nLength+1];
    WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,pBuffer,nLength,NULL,NULL);
    pBuffer[nLength]=0;
    return pBuffer;
}
//Unicode 轉(zhuǎn)換成 BIG5:
char* UnicodeToBIG5(const wchar_t* szUnicodeString)
{
    UINT nCodePage = 950; //BIG5
    int nLength=WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,NULL,0,NULL,NULL);
    char* pBuffer=new char[nLength+1];
    WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,pBuffer,nLength,NULL,NULL);
    pBuffer[nLength]=0;
    return pBuffer;
}
//繁體中文BIG5 轉(zhuǎn)換成 簡(jiǎn)體中文 GB2312
char* BIG5ToGB2312(const char* szBIG5String)
{
    LCID lcid = MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC);
    wchar_t* szUnicodeBuff = BIG5ToUnicode(szBIG5String);
    char* szGB2312Buff = UnicodeToGB2312(szUnicodeBuff);
    int nLength = LCMapString(lcid,LCMAP_SIMPLIFIED_CHINESE, szGB2312Buff,-1,NULL,0);
    char* pBuffer = new char[nLength + 1];
    LCMapString(0x0804,LCMAP_SIMPLIFIED_CHINESE,szGB2312Buff,-1,pBuffer,nLength);
    pBuffer[nLength] = 0;
    
    delete[] szUnicodeBuff;
    delete[] szGB2312Buff;
    return pBuffer;
}
//簡(jiǎn)體中文 GB2312 轉(zhuǎn)換成 繁體中文BIG5
char* GB2312ToBIG5(const char* szGBString)
{
    LCID lcid = MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC);
    int nLength = LCMapString(lcid,LCMAP_TRADITIONAL_CHINESE,szGBString,-1,NULL,0);
    char* pBuffer=new char[nLength+1];
    LCMapString(lcid,LCMAP_TRADITIONAL_CHINESE,szGBString,-1,pBuffer,nLength);
    pBuffer[nLength]=0;
    wchar_t* pUnicodeBuff = GB2312ToUnicode(pBuffer);
    char* pBIG5Buff = UnicodeToBIG5(pUnicodeBuff);
    delete[] pBuffer;
    delete[] pUnicodeBuff;
    return pBIG5Buff;
}

三、API 函數(shù):MultiByteToWideChar參數(shù)說明

第一個(gè)參數(shù)為代碼頁, 用 GetLocaleInfo 函數(shù)獲取當(dāng)前系統(tǒng)的代碼頁,936: 簡(jiǎn)體中文, 950: 繁體中文
第二個(gè)參數(shù)為選項(xiàng),一般用 0 就可以了
第三個(gè)參數(shù)為 ANSI 字符串的地址, 這個(gè)字符串是第一個(gè)參數(shù)指定的語言的 ANSI 字符串 (AnsiString)
第四個(gè)參數(shù)為 ANSI 字符串的長(zhǎng)度,如果用 -1, 就表示是用 0 作為結(jié)束符的字符串
第五個(gè)參數(shù)為轉(zhuǎn)化生成的 unicode 字符串 (WideString) 的地址, 如果為 NULL, 就是代表計(jì)算生成的字符串的長(zhǎng)度
第六個(gè)參數(shù)為轉(zhuǎn)化生成的 unicode 字符串緩存的容量,也就是有多少個(gè)UNICODE字符。

相關(guān)文章

  • getdate()函數(shù)的用法實(shí)例

    getdate()函數(shù)的用法實(shí)例

    getdate()函數(shù)的用法實(shí)例,需要的朋友可以參考一下
    2013-03-03
  • 在 VSCode 中配置 C++ 開發(fā)環(huán)境的詳細(xì)教程

    在 VSCode 中配置 C++ 開發(fā)環(huán)境的詳細(xì)教程

    本文詳細(xì)介紹了如何在Visual Studio Code(VSCode)中配置C++開發(fā)環(huán)境,包括安裝必要的工具、配置編譯器、設(shè)置調(diào)試環(huán)境等步驟,通過這些步驟,你可以快速搭建C++開發(fā)環(huán)境,實(shí)現(xiàn)高效編程,感興趣的朋友一起看看吧
    2025-01-01
  • c++特殊構(gòu)造函數(shù)詳解

    c++特殊構(gòu)造函數(shù)詳解

    大家好,本篇文章主要講的是c++特殊構(gòu)造函數(shù)詳解,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • OpenMP task construct 實(shí)現(xiàn)原理及源碼示例解析

    OpenMP task construct 實(shí)現(xiàn)原理及源碼示例解析

    這篇文章主要為大家介紹了OpenMP task construct 實(shí)現(xiàn)原理及源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • C語言每日練習(xí)之乒乓球比賽問題

    C語言每日練習(xí)之乒乓球比賽問題

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)乒乓球比賽,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C語言文件復(fù)制實(shí)例詳解

    C語言文件復(fù)制實(shí)例詳解

    這篇文章主要介紹了C語言文件復(fù)制實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C/C++獲取目錄下的文件列表信息

    C/C++獲取目錄下的文件列表信息

    在C/C++編程時(shí),需要獲取目錄下面的文件列表信息,下面把代碼分享一下
    2014-02-02
  • C++ primer超詳細(xì)講解泛型算法

    C++ primer超詳細(xì)講解泛型算法

    泛型編程,故如其名,是一個(gè)泛化的編程方式。其實(shí)現(xiàn)原理為程序員編寫一個(gè)函數(shù)/類的代碼示例,讓編譯器去填補(bǔ)出不同的函數(shù)實(shí)現(xiàn)
    2022-07-07
  • C語言中static與extern關(guān)鍵字的深入解析

    C語言中static與extern關(guān)鍵字的深入解析

    在C語言編程中,static和extern是兩個(gè)非常重要的關(guān)鍵字,它們各自有著獨(dú)特的用途,本文將深入探討這兩個(gè)關(guān)鍵字的工作原理、底層實(shí)現(xiàn)機(jī)制以及在實(shí)際開發(fā)中的應(yīng)用,感興趣的小伙伴跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • C++ win系統(tǒng)如何用MinGW編譯Boost庫

    C++ win系統(tǒng)如何用MinGW編譯Boost庫

    這篇文章主要介紹了C++ win系統(tǒng)如何用MinGW編譯Boost庫問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12

最新評(píng)論

广安市| 丽江市| 谷城县| 六安市| 兴义市| 九龙城区| 木兰县| 吴桥县| 镇赉县| 临猗县| 泽普县| 涟源市| 烟台市| 闽清县| 靖宇县| 荥经县| 通辽市| 清新县| 新绛县| 沾化县| 新疆| 通渭县| 阿拉尔市| 连南| 日照市| 万山特区| 嘉定区| 舟山市| 伊川县| 郁南县| 鄂州市| 洞口县| 万山特区| 浦北县| 新兴县| 东平县| 休宁县| 深泽县| 北流市| 浦江县| 囊谦县|