宽字符与窄字符的转换
最近在使用酷Q的SDK时,连接数据库时,始终是中文乱码。
缺乏这方面经验的我,饱受摧残。
下面有四个函数在这里收集起来,留作以后用。
(可以实现,特定的乱码转为汉字)
来自于酷Q内部提供的函数
宽字符转为窄字符的函数。
string ws2s(const wstring &ws) {
return wstring_convert<codecvt_utf8<wchar_t>, wchar_t>().to_bytes(ws);
}
窄字符转为宽字符
wstring s2ws(const string &s) {
return wstring_convert<codecvt_utf8<wchar_t>, wchar_t>().from_bytes(s);
}
汉字的正确转换
std::wstring StringToWstring(const std::string str) { // string转wstring
unsigned len = str.size() * 2; // 预留字节数
setlocale(LC_CTYPE, ""); //必须调用此函数
wchar_t *p = new wchar_t[len]; // 申请一段内存存放转换后的字符串
mbstowcs(p, str.c_str(), len); // 转换
std::wstring str1(p);
delete[] p; // 释放申请的内存
return str1;
}
std::string WstringToString(const std::wstring str) { // wstring转string
unsigned len = str.size() * 4;
setlocale(LC_CTYPE, "");
char *p = new char[len];
wcstombs(p, str.c_str(), len);
std::string str1(p);
delete[] p;
return str1;
}