欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來(lái)到入門(mén)教程網(wǎng)!

C語(yǔ)言

當(dāng)前位置:主頁(yè) > 軟件編程 > C語(yǔ)言 >

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

來(lái)源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語(yǔ)言|點(diǎn)擊: 次

本文主要以實(shí)例形式討論了VC編譯環(huán)境下,實(shí)現(xiàn)字符串和文件編碼方式轉(zhuǎn)換的方法,在linux下請(qǐng)使用Strconv來(lái)實(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ù)說(shuō)明

第一個(gè)參數(shù)為代碼頁(yè), 用 GetLocaleInfo 函數(shù)獲取當(dāng)前系統(tǒng)的代碼頁(yè),936: 簡(jiǎn)體中文, 950: 繁體中文
第二個(gè)參數(shù)為選項(xiàng),一般用 0 就可以了
第三個(gè)參數(shù)為 ANSI 字符串的地址, 這個(gè)字符串是第一個(gè)參數(shù)指定的語(yǔ)言的 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字符。

上一篇:C和MFC巧妙獲取外網(wǎng)IP的兩種實(shí)現(xiàn)方法

欄    目:C語(yǔ)言

下一篇:C++調(diào)用C#的DLL實(shí)現(xiàn)方法

本文標(biāo)題:VC中實(shí)現(xiàn)GB2312、BIG5、Unicode編碼轉(zhuǎn)換的方法

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/3576.html

網(wǎng)頁(yè)制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語(yǔ)言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有