socket.io-clientpp icon indicating copy to clipboard operation
socket.io-clientpp copied to clipboard

Problem when client send a chinese text

Open shuidong opened this issue 12 years ago • 2 comments

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 >。

shuidong avatar Dec 24 '12 03:12 shuidong

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);.

shuidong avatar Dec 24 '12 09:12 shuidong

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.

ebshimizu avatar Dec 24 '12 19:12 ebshimizu