CString UTF8Convert(CString &str,int sourceCodepage,int targetCodepage)
{
//CP_ACP=ANSI,CP_UTF8=utf-8  
    int len=str.GetLength();   
    int unicodeLen=MultiByteToWideChar(sourceCodepage,0,str,-1,NULL,0);   
    wchar_t * pUnicode;   
    pUnicode=new wchar_t[unicodeLen+1];   
    memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));   
    MultiByteToWideChar(sourceCodepage,0,str,-1,(LPWSTR)pUnicode,unicodeLen);  
    BYTE * pTargetData = NULL;   
    int targetLen=WideCharToMultiByte(targetCodepage,0,(LPWSTR)pUnicode,-1,(char *)pTargetData,0,NULL,NULL);   
    pTargetData=new BYTE[targetLen+1];   
    memset(pTargetData,0,targetLen+1);   
    WideCharToMultiByte(targetCodepage,0,(LPWSTR)pUnicode,-1,(char *)pTargetData,targetLen,NULL,NULL);   
    CString rt;   
    rt.Format("%s",pTargetData);   
    delete pUnicode;   
    delete pTargetData;   
    return rt;   
}
能翻译成C#吗??

解决方案 »

  1.   

    我就是要把从数据库里找的东西经过utf8编码后发送出去
     taskItem.itemdesc = System.Text.Encoding.UTF8.GetString(System.Text.Encoding.UTF8.GetBytes(dr["Opitem_Desc"].ToString()));
    这个是没用的 还是乱码
    求帮助
      

  2.   

    这个项目原来是用c++写的  我看不懂  现在要用c#写 我发现转码不行 就找了原来的转码方法 看翻译成c#能不能转码成功 
    求各位 帮帮忙
      

  3.   

     taskItem.itemdesc = System.Text.Encoding.UTF8.GetString(System.Text.Encoding.UTF8.GetBytes(dr["Opitem_Desc"].ToString()));
    这个不成功  还是乱码
      

  4.   

    这是把一种编码的CString转换为另一种编码的CString,C#中不需要这种转换,因为.Net的String在内存中的字符编码统一都是Unicode,真正需要转换是在字符串转为字节数据时,根据需要的字符编码,取得对应的字符编码类,然后调用Encoding.GetBytes函数。.Net Framework库中很多类封装好了这个过程,比如TextWriter、SerialPort等等,使用时只需要传递一个Encoding实例即可。
      

  5.   

    可是 这样转过来
    Encoding.GetEncoding("GB2312").GetString(UTF8Encoding.UTF8.GetBytes(dr["Opitem_Desc"].ToString()));
    还是乱码啊  虽然就几个汉字乱码
      

  6.   

    需要转吗?
    string 又不分编码格式吧?
      

  7.   

    Encoding.GetEncoding("GB2312").GetString(UTF8Encoding.UTF8.GetBytes(“断开 220kv南开线2201断路器"));
    到了手持设备就是断开 220kv南开**2201断路**    
    **就是乱码
      

  8.   

    GB2312 UTF8
    把字符串转成UTF8字节数组,然后再把这个字节数组转成GB2312字符串
    你是怎么想的?
      

  9.   

    Encoding.GetEncoding("UTF8").GetString(UTF8Encoding.UTF8.GetBytes(“断开 220kv南开线2201断路器"));