得到一个CString cstr = L“阳”;如何得到cstr的UTF-8内码。如“阳”的UTF-8码为:E998B3

解决方案 »

  1.   

    int  main(void)  
    {  
     char  str  [  256  ]  =  "阳"  ;    //一段UTF-8编码  
     WCHAR*  strA;  
     int  i=  MultiByteToWideChar  ( CP_ACP   ,  0  ,(char*)  str  ,-1  ,NULL,0);  
     strA  =  new  WCHAR[i];  
     MultiByteToWideChar  (  CP_ACP  ,  0  ,(  char  *  )  str,  -1,  strA  ,  i);  
     
     i=  WideCharToMultiByte(CP_UTF8,0,strA,-1,NULL,0,NULL,NULL);  
     char  *strB=new  char[i];  
     WideCharToMultiByte  (CP_UTF8,0,strA,-1,strB,i,NULL,NULL);  
     //strB即为所求  
     delete  []strA;  
     delete  []strB;  
     return  0;  
    }  
      

  2.   

    最后strB中所得到的内容是:"闃“,得不到UTF-8码:E998B3
      

  3.   

    你要以16进制输出啊,加了一行int  main(void)  
    {  
    char  str  [  256  ]  =  "阳"  ;    //一段ansi编码  
    WCHAR*  strA;  
    int  i=  MultiByteToWideChar  ( CP_ACP  ,  0  ,(char*)  str  ,-1  ,NULL,0);  
    strA  =  new  WCHAR[i];  
    MultiByteToWideChar  (  CP_ACP  ,  0  ,(  char  *  )  str,  -1,  strA  ,  i);  i=  WideCharToMultiByte(CP_UTF8,0,strA,-1,NULL,0,NULL,NULL);  
    char  *strB=new  char[i];  
    WideCharToMultiByte  (CP_UTF8,0,strA,-1,strB,i,NULL,NULL);  printf("%02X%02X%02X", (int)strB[0], (int)strB[1], (int)strB[2]);   
    delete  []strA;  
    delete  []strB;  
    return  0;  
    }  
      

  4.   

    WideCharToMultiByte 制定UTF8字符集,得到对应的编码数据
      

  5.   

    用WideCharToMultiByte,第1参数给CP_UTF8,可以转换成UTF-8编码。如果需要转为十六进制字符串,可以用逐字节用%02X格式化,再连到一起。