windows下gbk↔utf-8转换必须经utf-16中转,用multibytetowidechar/widechartomultibyte并注意cp_acp与cp_utf8;linux/macos用iconv,注意编码名兼容性及双指针用法;禁用已弃用的std::codecvt;处理gbk含 时须用显式长度而非strlen。

Windows 下用 MultiByteToWideChar 和 WideCharToMultiByte 转 GBK ↔ UTF-8
Windows API 是最稳妥的本地方案,不依赖第三方库,但必须走宽字符中转(wchar_t)。UTF-8 和 GBK 都是多字节编码,不能直接互转,中间必须经过 UTF-16(即 Windows 的 wchar_t 表示形式)。
常见错误现象:MultiByteToWideChar 返回 0 且 GetLastError() 是 123(ERROR_INVALID_NAME),通常是输入指针为空、长度传错,或源编码标识(CP_UTF8 / CP_ACP)写反了。
-
CP_ACP对应系统默认 ANSI 代码页,在简体中文 Windows 上就是 GBK;别硬写936,可读性差还容易误用 - 调用前务必检查返回值,失败时用
GetLastError()定位;尤其注意目标缓冲区大小——WideCharToMultiByte传0可先获取所需字节数,避免截断 - 输入字符串必须以