int UbiAscIIToUnicode(char*pstr ,CString& str)
{
int nAnsiLen=strlen(pstr);
int nUniLen=MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,pstr,nAnsiLen,NULL,0);
LPWSTR pUnicode=(LPWSTR)LocalAlloc(LPTR,nUniLen);
        int nRet=MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,pstr,nAnsiLen,pUnicode,nUniLen);
        str=pUnicode;//error
return nRet;}
以上是我写的从ASCII转化为CString的函数
在 str=pUnicode;出错了
请高手指点一下正确的函数应该怎么写?谢谢

解决方案 »

  1.   

    在 str=pUnicode;出啥错了 
      

  2.   

    分配有问题,要给\0分配空间
    LPWSTR pUnicode=(LPWSTR)LocalAlloc(LPTR,(nUniLen+1)*sizeof(WCHAR)); 执行完转换,因为是字符串,末尾要加'\0'
    pUnicode[nRet]='\0';
    然后要用CStringW来接收LPWSTR,CString不明确,可能出错
    最后释放掉分配的内存LocalFree(pUnicode);
      

  3.   

    try ... catch捕获错误看看是什么错误
      

  4.   


    就是2楼说的这个问题,MultiByteToWideChar返回的是字符数,而不是字节数LPWSTR pUnicode = (LPWSTR)LocalAlloc(LPTR,(nUniLen + 1) * sizeof(WCHAR));
      

  5.   

    请问能不能写一个UTF8转化到Unicode的函数
    函数名:CString UTF8ToUnicode(char* UTF8code)
      

  6.   

    请问能不能写一个UTF8转化到Unicode的函数
    MultiByteToWideChar()第一个参数填CP_UTF8就是你要的函数。
      

  7.   

    自己看着办,稍微改下就OK 
        char* szU8Buf="Notes-zhCN: 淇濆瓨瑙掕壊鑳屽寘涓庨摱琛屽唴鐗╁搧鐨勪俊鎭\xaf";
        int nUTF8=strlen(szU8Buf);
        int nWCHAR=MultiByteToWideChar(CP_UTF8,0,szU8Buf,nUTF8,NULL,0);
        WCHAR* szUnicode=new WCHAR[nWCHAR+1];
        MultiByteToWideChar(CP_UTF8,0,szU8Buf,nUTF8,szUnicode,nWCHAR);
        szUnicode[nWCHAR]='\0';
        CStringW u8;
        u8=szUnicode;
        delete[] szUnicode;
        MessageBoxW(NULL,u8,u8,MB_OK);
      

  8.   


    FILE* file; wchar_t* name = L"Text.txt"; file = _wfopen(name,L"rb"); fseek(file,0,0); while(feof(file)) wchar_t buffw[100];fgetws(buffw,100,file); int len = WideCharToMultiByte(CP_ACP,0,buffw+1,wcslen(buffw+1),NULL,NULL,NULL,NULL); LPSTR lpsz = new char[len+1];WideCharToMultiByte(CP_ACP,0,buffw+1,wcslen(buffw+1),lpsz,len,NULL,NULL); lpsz[len] = '\0';
    这个我写的 测试过了 没问题 希望对你能有些帮助
    这里的Text.txt是Unicode的如果是ASC到Unicode转换 把wchar_t 换成 char 
    函数在换下 自己弄一下就能出来了
    思路一样的