ACSII和UTF8的互相转换

从网上找的,用着挺好的:),实际用的话还要整理一下

char *Convert(char *str, int sourceCodepage, int targetCodepage) 
{
    
int unicodeLen, targetLen;
    wchar_t 
*pUnicode; 
    BYTE 
*pTargetData; 
    
char rt[256];

    unicodeLen
=MultiByteToWideChar(sourceCodepage,0,str,-1,NULL,0); 
    pUnicode 
= (wchar_t *)malloc((unicodeLen + 1* sizeof(wchar_t)); 
    memset(pUnicode,
0,(unicodeLen+1)*sizeof(wchar_t)); 
    MultiByteToWideChar(sourceCodepage, 
0, str, -1, (LPWSTR)pUnicode, unicodeLen); 

    targetLen 
= WideCharToMultiByte(targetCodepage, 0, (LPWSTR)pUnicode, -1
        (
char *)pTargetData, 0, NULL, NULL);
    pTargetData 
= (BYTE *)malloc((targetLen + 1* sizeof(BYTE));
    memset(pTargetData, 
0, targetLen + 1);
    WideCharToMultiByte(targetCodepage, 
0, (LPWSTR)pUnicode, -1
        (
char *)pTargetData, targetLen, NULL, NULL);

    memcpy(rt, (
char *)pTargetData, targetLen);

    free(pUnicode);
    free(pTargetData);

    
return rt; 
}

使用:

编码 Convert(NewName, 936, CP_UTF8);

解码 Convert(NewName, CP_UTF8, 936);

posted @ 2009-06-24 09:18  young130  阅读(252)  评论(0)    收藏  举报