1.wxString转char*
const char* cs = wxStr.mb_str(wxConvUTF8);
2.char* 转 wxString
wxString mystring(dataPtr, wxConvUTF8);
3.find函数
都没有空格的情况下
{"errcode":0,"errmsg":"ok","access_token": "accesstoken000001","expires_in":7200}
loc = mystring.First("\"errmsg\":");
返回13, 也就是从0开始数, 第13个字符是"errormsg" 的第一个字符.
4.SubString
想获取"errcode":后面的字符串, 可以截取
"errorcode:0" 第一次出现的位置是1;用1+本身字符串的长度. 就是后面字符串的起点.
明确一点SubString, 第一个参数是截取后保留字符串的第一个字符的位置, 后面的参数是总字符串的长度, 也就是保留字符串最后一个字符的位置+1;
tmp = mystring.SubString(1+10, mystring.Length());
5.字符串编码
我所理解的编码, 每个字符串有独一无二的编码比如中文"你好", 在utf-8的时候存储的是表中的序号"序号utf-8", 在ascii文件中存储的是"序号ascii". 当前文件想知道这是什么字. 他手里只有序号. 当拿着"序号utf-8" 去ascii表中去找对应的文字, 那么就显示乱码了. 只有拿到正确的"你好". 再送给下家进行操作的时候, 下家才知道这个"你好", 在它当前需要的表中对应的序号是什么. 序号+编码确定一个字符的显示
例如: 在ascii文件中的汉字. 读取出来, char * 中存储的就是多字节, 或者unicode类型. 想转到utf-8怎么办
wxString uriWithPara.sprintf("%s", data);//可取出多字节或者unicode
//转成utf-8
char* utf8Msg = UnicodeToUtf8(m_weixinMsg.wchar_str());
char* MainFrm::UnicodeToUtf8(const wchar_t* unicode)
{
int len;
len = WideCharToMultiByte(CP_UTF8, 0, unicode, -1, NULL, 0, NULL, NULL);
char *szUtf8 = (char*)malloc(len + 1);
memset(szUtf8, 0, len + 1);
WideCharToMultiByte(CP_UTF8, 0, unicode, -1, szUtf8, len, NULL, NULL);
return szUtf8;
}
用完不要释放里面传出来的指针哦!
所以涉及到实质的转码, 是要重新开辟空间的, 毕竟存储的大小也不一样了.