我观察了一下内存,好象cstring类型中的ascii字符仍然是一个字节,而中文是两个字节。那么该如何将其转换成都是两字节的unicode呢?

解决方案 »

  1.   

    CString str="safdlkasfds三角裤萨地方";
    BSTR bstr=str.AllocSysString();
      

  2.   

    注意
    BSTR bstr=str.AllocSysString();
    得到后不用了把他用
    SysFreeString(bstr) ;
    释放掉
      

  3.   

    BSTR bstr=m_rmsg.AllocSysString();
    int i=WideCharToMultiByte(CP_UTF8,0,bstr,-1,NULL,0,NULL,NULL);      
        char *stra =new char[i];
    WideCharToMultiByte(CP_UTF8,0,bstr,-1,stra,i,NULL,NULL); 
    delete []stra;
    SysFreeString(bstr);这样把m_rmsg转化成utf-8编码好象不对,为什么呢?
      

  4.   

    m_rmsg="123通工"
    正确的utf-8编码应该是31 32 33 a8 cd a4 b9 00
    查看内存的31 32 33 e9 80 9a e5 b7 a5 00
      

  5.   

    另外,是否有方法判断cstring哪些字符用了两个字节,哪些只用了一个字节呢?
    例如:cstring s="123通工”
    怎么把“123”和“通工”区分开?
      

  6.   

    utf-8码汉字应该是三个字节吧?a8cd明显是通的asc码值,即char str[3]="通";str[0]==a8,str[1]==cd,