C++ escape和unescape算法

escape算法

 

std::string escape(std::string &str)
{
	setlocale(LC_CTYPE,"");
	wchar_t aa[1<<10];
	mbstowcs(aa,str.c_str(),str.size());
	std::wstring wcs(aa);
	str = "";
	for(int i=0;i<wcs.size();i++){
		if(wcs[i]>0xff){
			char tmp[5];
			sprintf(tmp,"%x",wcs[i]);
			str += "%u";
			str += tmp;
		}
		else{
			if( (wcs[i]>='a' && wcs[i]<='z') || (wcs[i]>='A' && wcs[i]<='Z') || ( wcs[i]>='0' && wcs[i]<='9' ) ){
				char tmp[2];
				sprintf(tmp,"%c",wcs[i]);
				str += tmp;
			}
			else{
				char tmp[3];
				sprintf(tmp,"%02x",wcs[i]);
				str += "%";
				str += tmp;
			}
		}
	}
	return str;
}

 

 

 

 

 

 

 

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值