求UTF8如何转成GB2312原码!请各位高手给出原码。
如把联通转成联通

解决方案 »

  1.   

    http://www.vckbase.com/document/viewdoc/?id=1444
      

  2.   

    http://www.vckbase.com/document/viewdoc/?id=1397
      

  3.   

    void CLangConvert::ConvertUTF8toGB2312(CString str,_bstr_t& bstr)
    {
    int n=MultiByteToWideChar(CP_UTF8,0,str,str.GetLength(),NULL,0);
    WCHAR * pChar = new WCHAR[n+1];
    n=MultiByteToWideChar(CP_UTF8,0,str,str.GetLength(),pChar,n);
    pChar[n]=0;
    OLECHAR * pTempBuffer = pChar;
    BSTR strPassword = SysAllocString(pTempBuffer);
    _bstr_t aa (strPassword,FALSE);
    bstr=aa;
    SysFreeString(strPassword);
    delete []pChar;
    }
      

  4.   

    http://www.vckbase.com/code/relateddoc.asp?id=2658
      

  5.   

    上面说的方法都不能把联通转成联通!还请各位高手指点!!!!!!!!
      

  6.   

    联&#x901A,这些不是UTF_8编码,utf_8编码是3字节的。
      

  7.   

    那又如何把它转成GB2312呢?
    int unencode(char *s,char *d)
    {
    if(!s||!d) return 0;
    for(;*s!=0;s++)
    {
    if(*s=='+')
    {
    *d=' ';
    d++;
    }
    else if(*s=='%')
    {
    int code;
    if(sscanf(s+1,"%02x",&code)!=1) code='?';
    *d=code;
    s+=2;
    d++;
    }
    else
    {
    *d=*s;
    d++;
    }
    }
    *d=0;
    return 1;

    好像转不现来,麻帮忙解决下?
    谢谢!
      

  8.   

    将Unicode转换到ANSI
    (1)使用WideCharToMultiByte,例如:
    // 假设已经有了一个Unicode 串 wszSomeString... 
    char szANSIString [MAX_PATH]; 
    WideCharToMultiByte ( CP_ACP, WC_COMPOSITECHECK, wszSomeString, -1, szANSIString, sizeof(szANSIString), NULL, NULL ); 
    (2)使用W2A宏来实现,例如:
    USES_CONVERSION;
    pTemp=W2A(wszSomeString); 注意在转换时可能存在的问题:
    因为ANSI转UNICODE,如果使用A2W或MultiByteToWideChar(第一个参数是CP_ACP)的话,是根据系统默认的转码表,把转入的ANSI字符串看作Multi-Bytes字符串处理的,如果是中文(中文windows默认就是中文),一个大于0x87的byte可能和下一byte一起被看作一个汉字,然后根据汉字的Unicode编码转换为相同的Unicode汉字,如果找不到相应的编码,一般就用一个默认的字符来取代它(一般是问号“?”),由此看,如果随便把一段数据给他转,转化很复杂而且极可能不可逆,而且你加密过的ANSI码是相当混乱的有很多〉0x87的byte,转换就变得不可逆了。
    建议自己直接就这样写:
    CHAR lpANSI[COUNT];
    WCHAR lpUnicode[COUNT];
    int i = 0; 
    while(lpANSI[i] != '\0' ) {
        lpUnicode[i] = (WCHAR)lpANSI[i];
    }
    lpUnicode[i] = L'\0';
    然后按相同的方法转回来,因为对于0~0x87的ANSI字符串,对应的Unicode码就是相同的16位值,至于其他的,你的字符串反正加了密,没必要转换成显示出来是一样的字符,就按同样的方法处理了,其实如果中间的字符串不用显示或别的,直接reutrn (LPWSTR)lpANSI;过去也可以, 反正接受的时候自己清楚就可以了。