修订了一个字符集相关的bug

5 篇文章 0 订阅

在发送给mysql服务器的SQL编码时,CLR的System::String类型需要转成MultiByte类型的String。

使用了wcstombs_s进行转换,之前需要setlocale设定转换字符集。

setlocale(LC_ALL,"chs_chn.936");

意味着中国语_中国地区_GBKcodepage。


int tsql::f_StringToChar(System::String ^pStr,	// 被转换的System::String
						 char **pOut,			// 转换出的char 数组
						 int * piSize)			// 转换出的大小.
{
	pin_ptr<const wchar_t> wch = PtrToStringChars(pStr);

	// Convert to a char*
	size_t origsize = wcslen(wch) + 1;
	const size_t newsize = origsize * sizeof(wchar_t);
	size_t convertedChars = 0;
	
	if (*pOut == NULL)
	{
		*pOut = new char [newsize];
		if (piSize)
			*piSize = (int)newsize;
	}
	else
	{
		if (piSize)
		{
			if (*piSize < (int)newsize)
			{
				delete [] *pOut;
				*pOut = new char [newsize];
				if (piSize)
					*piSize =(int) newsize;
			}
		}
	}
	setlocale(LC_ALL,"chs_chn.936");	// 等于LC_ALL,""
	wcstombs_s(&convertedChars, *pOut, newsize, wch, newsize);
	return newsize;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值