socket.io-clientpp
socket.io-clientpp copied to clipboard
Problem when client send a chinese text
simply I wrote some code to send message in chinese
std::string msg;
msg = "汉字";
handler->emit("test", msg);.
And here occur a exception like below:
boost::exception_detail::clone_implboost::exception_detail::error_info_injector<boost::system::system_error >。
i added method below, and solve that problem.
inline void WStrToUTF8(std::string& dest, const std::wstring& src){
dest.clear();
for (size_t i = 0; i < src.size(); i++){
wchar_t w = src[i];
if (w <= 0x7f)
dest.push_back((char)w);
else if (w <= 0x7ff){
dest.push_back(0xc0 | ((w >> 6)& 0x1f));
dest.push_back(0x80| (w & 0x3f));
}
else if (w <= 0xffff){
dest.push_back(0xe0 | ((w >> 12)& 0x0f));
dest.push_back(0x80| ((w >> 6) & 0x3f));
dest.push_back(0x80| (w & 0x3f));
}
else if (sizeof(wchar_t) > 2 && w <= 0x10ffff){
dest.push_back(0xf0 | ((w >> 18)& 0x07)); // wchar_t 4-bytes situation
dest.push_back(0x80| ((w >> 12) & 0x3f));
dest.push_back(0x80| ((w >> 6) & 0x3f));
dest.push_back(0x80| (w & 0x3f));
}
else
dest.push_back('?');
}
}
inline std::string WStrToUTF8(const std::wstring& str){ std::string result; WStrToUTF8(result, str); return result; }
/// std::string msg; msg = WStrToUTF8(L"汉字"); handler->emit("test", msg);.
Looks like boost had a problem with those characters. I wonder if there's an easier way to do that, since the boost libraries probably have a way to handle different string encodings. I'll let you know if I find anything.