由于项目原因,需要引入C++。
wstring 与 string 的互转研究了一段时间,坑主要在于使用下面这种方式进行转换,中文会乱码
wstring ws = L"这是一段测试文字"; string s; s.assign(ws.begin(), ws.end());
因此采用了下面的方法将wstring 转为 string
wstring wstr = L"这是一段测试文字"; string str; int wstr_len = wstr.length(); int str_len = wstr_len * sizeof(wchar_t); str.resize(str_len); int new_len = WideCharToMultiByte(CP_ACP,0,(LPCWSTR)wstr.c_str(),wstr_len,(LPSTR)str.c_str(),str_len,NULL,NULL); str.resize(new_len);
类似的 string转为wstring 为
int str_len = s.length();//这里的s是上述办法转下来的string wstring wstr; wstr.resize(str_len); int new_len = MultiByteToWideChar(CP_ACP,0,(LPSTR)s.c_str(),str_len,(LPWSTR)wstr.c_str(),str_len); wstr.resize(new_len);
wstring 转为 String^ 的方法为
auto ps = ref new String(wstr.c_str());
String^ 转为 wstring 的方法为
wstring wstr(ps->Data());