急求UTF8、unicode编码的相互转换的程序

zhangjinsong2000 2003-10-11 03:59:14
急啊,各位帮帮忙啊!
...全文
30 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
microran2000 2003-10-11
  • 打赏
  • 举报
回复
UNICODE和ANSI的转换就比较简单了。可以采用
USES_CONVERSION;
T2OLE()宏定义
unsigned char HexString2Byte(const char* szChar)
{
char *szTemp=(char*)szChar;
if(*szChar=='%')szTemp++;
int nUpper,nLower;
unsigned char ch = (unsigned char)*szTemp;
if (ch >= '0' && ch <= '9')
nUpper =(short)(ch - '0');
if (ch >= 'A' && ch <= 'F')
nUpper = (short)(ch - 'A' + 10);
if (ch >= 'a' && ch <= 'f')
nUpper = (short)(ch - 'a' + 10);
szTemp++;
ch = (unsigned char)*szTemp;
if (ch >= '0' && ch <= '9')
nLower =(short)(ch - '0');
if (ch >= 'A' && ch <= 'F')
nLower = (short)(ch - 'A' + 10);
if (ch >= 'a' && ch <= 'f')
nLower = (short)(ch - 'a' + 10);
return nUpper*16+nLower;

}
//http://auto.search.msn.com/response.asp?mt=%e5%86%89%e6%9e%97%e4%bb%93+%e5%92%8c%e5%b9%b3&srch=5&prov=&utf8
void UTF8_2_GB(const char* szUTF8,CString& szEscGB)
{

char* szDest=(char*)szUTF8;//GetSubString(szSource,0,"http://auto.search.msn.com/response.asp?mt=","http://auto.search.msn.com/response.asp?mt=");
//%e5%86%89%e6%9e%97%e4%bb%93+%e5%92%8c%e5%b9%b3
char szBuffer[MAX_LENGTH];

char szHex[3];
BYTE by;
WCHAR szTemp[MAX_LENGTH];
char szGB[MAX_LENGTH];
ZeroMemory(szGB,sizeof szGB);
strcpy(szGB,"");
USES_CONVERSION;
int j=0,nResult;
ZeroMemory(szBuffer,sizeof szBuffer);
for(int i=0;i<lstrlen(szDest);i++){
switch(szDest[i])
{
case '+':
nResult=MultiByteToWideChar(CP_UTF8,0,szBuffer,lstrlen(szBuffer)
,szTemp,sizeof szTemp);
szTemp[nResult]=0;
strcat(szGB,W2A(szTemp));
strcat(szGB,"+");

ZeroMemory(szBuffer,sizeof szBuffer);
j=0;
break;
case '%':
ZeroMemory(szHex,sizeof szHex);
szHex[0]=szDest[i+1];
szHex[1]=szDest[i+2];
by=HexString2Byte(szHex);
szBuffer[j]=by;
j++;
i+=2;

break;
default:

szBuffer[j]=szDest[i];
j++;

break;

}
if(i>=lstrlen(szDest))break;
}
nResult=MultiByteToWideChar(CP_UTF8,0,szBuffer,lstrlen(szBuffer),szTemp,sizeof szTemp);
szTemp[nResult]=0;
strcat(szGB,W2A(szTemp));
ATL::EscapeToCString(szEscGB,szGB);
szEscGB.Replace ("%2b","+");
return ;
}

wuxfBrave 2003-10-11
  • 打赏
  • 举报
回复
试试这个函数MultiByteToWideChar
具体内容看看MSDN

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧