如何使用 window api 转换字符集?

//宽字符转多字节
std::string W2A(const std::wstring& utf8)
{
	int buffSize = WideCharToMultiByte(CP_ACP, NULL, utf8.c_str(), -1, NULL, NULL, NULL, FALSE);
	char *gbk = new char[buffSize+1];
	memset(gbk, 0, buffSize + 1);
	WideCharToMultiByte(CP_ACP, NULL, utf8.c_str(), -1, gbk, buffSize, NULL, FALSE);
	std::string result(gbk);
	delete[] gbk;
	gbk = nullptr;
	return result;
}

//多字节转宽字符
std::wstring A2W(const std::string& gbk)
{
	int buffSize = MultiByteToWideChar(CP_ACP, NULL, gbk.c_str(), -1, NULL, NULL);
	wchar_t* utf8 = new wchar_t[buffSize+2];
	memset(utf8, 0, buffSize + 2);
	MultiByteToWideChar(CP_ACP, NULL, gbk.c_str(), -1, utf8, buffSize);
	std::wstring result(utf8);
	delete[] utf8;
	utf8 = nullptr;
	return result;
}
posted @   學海無涯  阅读(275)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示