windows socket中send函数只能发送char *,但我的工程编码是unicode?

发布于 2022-09-04 22:40:40 字数 169 浏览 19 评论 0

send(
    _In_ SOCKET s,
    _In_reads_bytes_(len) const char FAR * buf,
    _In_ int len,
    _In_ int flags
);

发现转化成多字节发送,服务端那边就乱码了。。。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

Saygoodbye 2022-09-11 22:40:40

为什么要转码?char *你可以理解为void *,强转一下就行了,接收端接收后强转回去不就得了。对于 socket 而言,就只是字节流而已,没有什么 Unicode 之分。

浮世清欢 2022-09-11 22:40:40

服务器方是否按照多字节解码?如果想要正确的通信结果,请确保客户端服务区端用同一套字符编码解码方案

铃予 2022-09-11 22:40:40

已解决,可以用以下方法:

CHAR* EncodingTool::UnicodeToUTF8(const WCHAR* wideStr)
{
    char* utf8Str = NULL;
    int charLen = -1;
    charLen = WideCharToMultiByte(CP_UTF8, 0, wideStr, -1, NULL, 0, NULL, NULL);
    utf8Str = (char*)malloc(charLen);
    WideCharToMultiByte(CP_UTF8, 0, wideStr, -1, utf8Str, charLen, NULL, NULL);
    return utf8Str;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文