C++ 实现encodeURI 兼容linux

const char * encodeURI(const char *Str)
	{
		wchar_t *Bufw = NULL;
		char *Bufc = NULL;
		static char RTV[5120] = { 0 };
		std::string strLocale = setlocale(LC_ALL, "");
		long needSize = mbstowcs(NULL, Str, 0) + 1;
		Bufw = new wchar_t[needSize];
		if (0 == needSize || NULL == Bufw) {
			if (NULL != Bufw) {
				delete[] Bufw;
				Bufw = NULL;
			}
			if (NULL != Bufc) {
				delete[] Bufc;
				Bufc = NULL;
			}
			return NULL;
		}
		memset(Bufw, 0x0, needSize * 2);
		mbstowcs(Bufw, Str, needSize);

		strLocale = setlocale(LC_ALL, "en_US.utf8");
		needSize = wcstombs(NULL, Bufw, 0) + 1;
		Bufc = new char[needSize];
		if (0 == needSize || NULL == Bufc) {
			if (NULL != Bufw) {
				delete[] Bufw;
				Bufw = NULL;
			}
			if (NULL != Bufc) {
				delete[] Bufc;
				Bufc = NULL;
			}
			return NULL;
		}
		memset(Bufc, 0x0, needSize);
		wcstombs(Bufc, Bufw, needSize);
		unsigned char *pWork = (unsigned char *)Bufc;
		memset(RTV, 0x0, sizeof(RTV));
		if (strlen(Bufc) > 5120) {
			if (NULL != Bufw) {
				delete[] Bufw;
				Bufw = NULL;
			}
			if (NULL != Bufc) {
				delete[] Bufc;
				Bufc = NULL;
			}
			return NULL;
		}
		while (*pWork != 0x0) {
			if (*pWork != '!' && *pWork != '@' && *pWork != '#' &&
				*pWork != '$' && *pWork != '&' && *pWork != '*' &&
				*pWork != '(' && *pWork != ')' && *pWork != '=' &&
				*pWork != ':' && *pWork != '/' && *pWork != ';' &&
				*pWork != '?' && *pWork != '+' && *pWork != '\'' &&
				*pWork != '.') {
				sprintf(RTV + strlen(RTV), "%%%2X", *pWork);
			}
			else {
				sprintf(RTV + strlen(RTV), "%c", *pWork);
			}
			pWork++;
		}
		if (NULL != Bufw) {
			delete[] Bufw;
			Bufw = NULL;
		}
		if (NULL != Bufc) {
			delete[] Bufc;
			Bufc = NULL;
		}
		return RTV;
	}
在Java中,`encodeURI()`、`encodeURIComponent()`、`decodeURI()` 和 `decodeURIComponent()` 都是用于处理URL编码和解码的内置函数,它们主要用于字符串转换,以便在HTTP请求头、URL路径、查询参数等需要统一格式的地方。 1. `encodeURI()` 函数:这个方法会将输入的URI(Uniform Resource Identifier)字符串按照规范进行编码,包括空格和其他非ASCII字符,适用于整个URI的编码,不会对已经编码的部分再次编码。例如: ```java String encoded = URLEncoder.encode("Hello World!", "UTF-8"); ``` 2. `encodeURIComponent()` 函数(注意这是JavaScript中的函数,不是Java标准库的一部分):它更专注于URL查询参数部分的编码,对于特殊字符如"!"、"*"、"&"等采用百分号%加上对应的十六进制数的方式编码。如果需要在Java中实现类似功能,可以使用`URLEncoder`结合`String`的`replace()`方法: ```java String encodedQuery = "Hello%20World!".replaceAll("[^a-zA-Z0-9\\-._~:/?#]", "%$0".charAt(0)); ``` 3. `decodeURI()` 函数:接收编码后的URI字符串并将其还原成原始形式。比如: ```java String decoded = URLDecoder.decode(encoded, "UTF-8"); ``` 4. `decodeURIComponent()` 函数:同样地,它用于解码URIComponent编码的数据。例子: ```java String decodedParam = URLDecoder.decode(encodedQuery, "UTF-8"); ``` 在实际应用中,如果你在构建URL、发送网络请求或者处理用户输入时遇到编码和解码的需求,就需要用到这些方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值