精华内容
下载资源
问答
  • <p>I'm trying to transform PUT request params to a key=>value array in my server. ... </code></pre> ...<p>This way I get a "dirt" array like this: ... [------WebKitFormBoundaryXXXXXXXXXXXXXXXX ...
  • iOS urlencoded 转码解码

    2016-11-09 16:49:29
    + (NSString *)encodeToPercentEscapeString: (NSString *) input {  // Encode all the reserved characters, per RFC 3986  // ()  NSString *outputStr = (NSString *) ... CFBridgingRe

    + (NSString *)encodeToPercentEscapeString: (NSString *) input

    {

        // Encode all the reserved characters, per RFC 3986

        // ()

        NSString *outputStr = (NSString *)

        CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,

                                                                  (CFStringRef)input,

                                                                  NULL,

                                                                  (CFStringRef)@"!*'();:@&=+$,/?%#[]",

                                                                  kCFStringEncodingUTF8));

        return outputStr;

    }


    + (NSString *)decodeFromPercentEscapeString: (NSString *) input

    {

        NSMutableString *outputStr = [NSMutableString stringWithString:input];

        [outputStr replaceOccurrencesOfString:@"+"

                                   withString:@" "

                                      options:NSLiteralSearch

                                        range:NSMakeRange(0, [outputStr length])];

        

        return [outputStr stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    }

    展开全文
  • 比如:www.xyz.com/op/lead.shtml?id=dac87a3d149d95318ec350c04df0a589683d04e0953064b1中的ID部分 dac87a3d149d95318ec350c04df0a589683d04e0953064b1 怎么可以解码还原出来
  • 由于post的数据都是经过urlencoded编码的,所以看到的数据如果是日文的话都是类似于“%8Ex%95%A5%8B%E0%8Az%8D%87%8Cv”这个样子的。 我想把它解码成原始数据,以便于调查。 于是使用了URLDecoder.decode方法进行...
    问题发生于,我想用tcpmon拦截页面提交数据。
    由于post的数据都是经过urlencoded编码的,所以看到的数据如果是日文的话都是类似于“%8Ex%95%A5%8B%E0%8Az%8D%87%8Cv”这个样子的。
    我想把它解码成原始数据,以便于调查。
    于是使用了URLDecoder.decode方法进行解码,发现解码回来的数据有误

    System.out.println(URLDecoder.decode("%8Ex%95%A5%8B%E0%8Az%8D%87%8Cv","windows-31j"));

    输出结果为
    [code]支?金?合?[/code]
    正确结果应该为
    [code]支払金額合計[/code]
    于是使用
    System.out.println(URLEncoder.encode("支払金額合計","windows-31j"));

    把这几个字符编码了一下,得到的结果是
    [code]%8E%78%95%A5%8B%E0%8A%7A%8D%87%8C%76[/code]
    和上面的比较了一下确实有些不一样
    下面几个编码好像变成了字幕
    [code]
    %78 ->x
    %7A ->z
    %76 ->z
    [/code]
    用下面代码解码一下也确实如此

    System.out.println(URLDecoder.decode("%78","windows-31j"));
    System.out.println(URLDecoder.decode("%7A","windows-31j"));
    System.out.println(URLDecoder.decode("%76","windows-31j"));


    但是问题是,为什么浏览器编码时和URLEncoder.encode编码是不一样的呢?为什么Tomcat可以正确的解码呢?
    调查了一下才发现Tomcat根本不是用的URLDecoder.decode来解码的,而是用的org.apache.catalina.util.RequestUtil类。
    这样解码一下发现都能得到正确的结果

    System.out.println(RequestUtil.URLDecode("%8Ex%95%A5%8B%E0%8Az%8D%87%8Cv","windows-31j"));
    System.out.println(RequestUtil.URLDecode("%8E%78%95%A5%8B%E0%8A%7A%8D%87%8C%76","windows-31j"));


    至于为什么,查看一下两个类的源代码就一清二楚了。
    至于为什么要这样做,我想是出于减少浏览器和服务器之间的传输数据量的考虑。
    展开全文
  • <p>Here's the string: <pre><code>%d0%91%d0%b5%d0%b7 </code></pre> <p>I think it's cyrillic and I need it ... postfilter=urlencoded, but I've no idea how to reproduce that on my server. </div>
  • 最近在研究java原生方法实现http服务,但网上一直没有找到可靠的x-www-form-urlencoded编码/解码代码,要么找到的就是简单的一维key-value转换,无法实现复杂对象的转换,例如提交以下参数: 我写的代码提供两个...

    最近在研究java原生方法实现http服务,但网上一直没有找到可靠的x-www-form-urlencoded编码/解码代码,要么找到的就是简单的一维key-value转换,无法实现复杂对象的转换,例如提交以下参数:
    复杂对象提交后java如何转换为map?
    我写的代码提供两个静态方法,分别是实现编码的方法public static String urlencode(Object params, String key),和实现解码的方法public static Map<String, Object> urldecode(String param)。
    编码方法传入的params参数支持包含String、Number、Map、List或者上述类型的数组对象。
    解码方法输出统一是map对象,如传入的参数包含有数组或者list对象,则输出时统一转化为list对象。

    代码中已经提供了测试方法,运行main方法即可看到结果。
    在这里插入图片描述

    package com.util;
    
    import java.io.UnsupportedEncodingException;
    import java.net.URLDecoder;
    import java.net.URLEncoder;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    import java.util.TreeMap;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    import org.apache.commons.lang3.ArrayUtils;
    
    public class HttpUrlParams {
    	
    	public static void main(String args[]) {
    		Map<String, Object> map = new HashMap<String, Object>();
    			List<Object> list = new ArrayList<Object>();
    			list.add("aa");
    			list.add(123);
    			list.add(new Object[] {"qq", 11});
    		map.put("list", list);
    			Map<String, Object> childMap = new HashMap<String, Object>();
    			childMap.put("num", 78);
    			childMap.put("str", "str?!+-str");
    			childMap.put("array", new int[] {44,55});
    		map.put("childMap", childMap);
    		map.put("array", new String[] {"ss", "Kk"});
    		
    		System.out.println(map);
    		String encodeStr = urlencode(map, "");
    		System.out.println(encodeStr);
    		Object decodeObj = urldecode(encodeStr);
    		System.out.println(decodeObj);
    	}
    	
    	public static String urlencode(Object params, String key) {
    		String res = "";
    		if(params instanceof Map) {
    			Map<String, Object> _params = (Map<String, Object>) params;
    			for(String i : _params.keySet()) {
    				String k = key.isEmpty() ? i : (key +"["+ i +"]");
    				String encodeValue = urlencode(_params.get(i), k);
    				if(!encodeValue.isEmpty()) {
    					res += '&'+ encodeValue;
    				}
    			}
    		}
    		else if(params instanceof List) {
    			List<Object> _params = (List<Object>) params;
    			for(Integer i = 0; i < _params.size(); i++) {
    				String k = key.isEmpty() ? i.toString() : (key +"["+ i.toString() +"]");
    				String encodeValue = urlencode(_params.get(i), k);
    				if(!encodeValue.isEmpty()) {
    					res += '&'+ encodeValue;
    				}
    			}
    		}
    		else if(params.getClass().isArray()) {
    			Object[] _params;
    			if(params instanceof Object[]) {
    				_params = (Object[]) params;
    			}
    			else if(params instanceof String[]) {
    				_params = (String[]) params;
    			}
    			else if(params instanceof int[]) {
    				_params = ArrayUtils.toObject((int[]) params);
    			}
    			else if(params instanceof double[]) {
    				_params = ArrayUtils.toObject((double[]) params);
    			}
    			else {
    				_params = new Object[] {};
    			}
    			for(Integer i = 0; i < _params.length; i++) {
    				String k = key.isEmpty() ? i.toString() : (key +"["+ i.toString() +"]");
    				String encodeValue = urlencode(_params[i], k);
    				if(!encodeValue.isEmpty()) {
    					res += '&'+ encodeValue;
    				}
    			}
    		}
    		else if(params instanceof String) {
    			String _params = (String) params;
    			try {
    				res += '&'+ URLEncoder.encode(key, "UTF-8") +'='+ URLEncoder.encode(_params, "UTF-8");
    			} catch (UnsupportedEncodingException e) {
    				e.printStackTrace();
    			}
    		}
    		else if(params instanceof Number) {
    			Number _params = (Number) params;
    			try {
    				res += '&'+ URLEncoder.encode(key, "UTF-8") +'='+ URLEncoder.encode(_params.toString(), "UTF-8");
    			} catch (UnsupportedEncodingException e) {
    				e.printStackTrace();
    			}
    		}
    		else {
    			return "";
    		}
    		return res.substring(1);
    	}
    	
    	
    	public static Map<String, Object> urldecode(String param) {
    		if(param == null || param.isEmpty()) {
    			return null;
    		}
    		//解码
    		String[] params = param.split("&");
    		Map<String, String> key2value = new TreeMap<String, String>();
    		for(int i = 0; i < params.length; i++) {
    			String[] p = params[i].split("=");
    			if(p.length == 0) {
    				continue;
    			}
    			try {
    				String keyStr = URLDecoder.decode(p[0], "UTF-8");
    				if(keyStr.isBlank()) {
    					continue;
    				}
    				String valueStr;
    				if(p.length == 2) {
    					valueStr = URLDecoder.decode(p[1], "UTF-8");
    				} else {
    					valueStr = "";
    				}
    				key2value.put(keyStr, valueStr);
    			} catch (UnsupportedEncodingException e) {
    				e.printStackTrace();
    			}
    		}
    		//遍历每一行传参
    		Map<String, Object> map = new HashMap<String, Object>();
    		for(Map.Entry<String, String> entry : key2value.entrySet()) {
    			String keyStr = entry.getKey();
    			String value = entry.getValue();
    			//根目录的key
    			Matcher keyMatcher = Pattern.compile("^[a-zA-Z\\_]{1}[\\w]*").matcher(keyStr);
    			if(!keyMatcher.find()) {
    				continue;
    			}
    			String key = keyMatcher.group(0);
    			if(!map.containsKey(key)) {
    				map.put(key, new HashMap<String, Object>());
    			}
    			
    			//二级以及二级目录以上的key
    			String pattern = "\\[([\\w]+?)\\]";
    			Matcher filterMatcher = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE).matcher(keyStr);
    			//获取所有的patternKey
    			List<String> patternKeyList = new ArrayList<String>();
    			while(filterMatcher.find()) {
    				String patternKey = filterMatcher.group(1);
    				patternKeyList.add(patternKey);
    			}
    			//有子元素
    			if(!patternKeyList.isEmpty()) {
    				//遍历并写入
    				Object childMap = map.get(key);
    				int patternKeyListSize = patternKeyList.size();
    				for(int j = 0; j < patternKeyListSize; j++) {
    					String patternKey = patternKeyList.get(j);
    					Map<String, Object> _childMap = (HashMap<String, Object>) childMap;
    					if(!_childMap.containsKey(patternKey)) {
    						//是否是最后一个节点,是的话直接赋值
    						if(j == patternKeyListSize-1) {
    							_childMap.put(patternKey, value);
    							break;
    						}
    						_childMap.put(patternKey, new HashMap<String, Object>());
    					}
    					childMap = _childMap.get(patternKey);
    				}
    			}
    			//只有一级元素
    			else {
    				map.put(key, value);
    			}
    		}
    		map = (Map<String, Object>) map2list(map);
    		return map;
    	}
    	
    	private static Object map2list(Map<String, Object> map) {
    		Set<String> keySet = map.keySet();
    		boolean all_is_number = true;
    		for(String key : keySet) {
    			//不是数字
    			if(!Pattern.matches("^[0-9]+$", key)) {
    				all_is_number = false;
    			}
    			Object childNode = map.get(key);
    			if(childNode instanceof Map) {
    				childNode = map2list((Map<String, Object>) childNode);
    				map.put(key, childNode);
    			}
    		}
    		Object res;
    		if(all_is_number) {
    			res = new ArrayList<Object>();
    			for(String key : keySet) {
    				Object value = map.get(key);
    				((List<Object>) res).add(value);
    			}
    		} else {
    			res = map;
    		}
    		return res;
    	}
    
    }
    
    展开全文
  • ![图片说明](https://img-ask.csdn.net/upload/201808/25/1535184868_544462.png)
  • URLEncoded编码中,所有的字符均为ANSCII码。编码原理如下:编码前的所有字符可以分成两类,(1)安全字符;(2)不安全字符。 对于安全字符,其必然是ANSCII码,但是ANSCII码不全是安全字符。安全字符...

    1.URLEncoed编码使用场景

    在Http协议的请求URI,协议标头,POST的窗体数据中,必须采用UrlEncoded编码方式。

    2.何为URLEncoed编码

    URLEncoded编码中,所有的字符均为ANSCII码。编码原理如下:编码前的所有字符可以分成两类,(1)安全字符;(2)不安全字符。

    对于安全字符,其必然是ANSCII码,但是ANSCII码不全是安全字符。安全字符在转变过程中不变化,仍为ANSCII。

    对于安全字符,包括所有的非ANSCII字符和部分ANSCII字符,采用(%原字符十六进制表示)组成。如:GB2312编码的“登”,URLEncoded编码后为“%B5%C7”。而UTF8编码的“登”,URLEncoded后为"%e7%99%bb"。还有一些特殊,如空格被变为"+"。

    3 如何实现?

    如果从头实现URLEncoded编码,必须熟悉各种编码,相当复杂。幸好System.Web.HttpUtility为我们提供了几个静态函数用于URLEncoed编码。具体如下:

    string HttpUtility.UrlEncode(string str, Encoding e);

    首先要说明的是在.net的世界里,char和string永远都是采用UNICODE编码。

    参数:str,编码前的UNICODE字符串,如"好人hehe";

    e,进行编码前,把str中的字符先有UNICODE变为e。e为转换后的编码方式,

    如GB2312;

    返回值:编码后的字符串的UNICODE表示。什么意思呢?URLEncoded编码为ANSCII编码,但是string是UNICODE,所以string是URLEncoded字符串的UNICODE表示。

    string HttpUtility.UrlDecode(string str, Encoding e);

    参数: str,URLEncoded编码字符串的UNICODE表示;

    e,原来字符串的编码方式,如GB2312,UTF8等。

    返回值:解码后的字符串的UNICODE表示。比如如果解码后为GB2312的"登",则实际返回的字符串中包含的是转化为UNICODE的“登”。

    需要说明的是,真正在网络上传输的是UrlEncoded字符串流,而不是它的UNICODE表示,然而.net中的大多数API却都是接收UNICODE表示字符串,实际发送时,会自动转化为ANCII版本,所以这种转换程序员不用操心。然而窗体数据需要转化:

    StreamWriter sw = new StreamWriter(requsetStream,

    Encoding.ASCII); //编码方式
    sw.Write(formdata); //写入窗体数据(urlencoded)

    展开全文
  • 之前对于此类解码比较苦忙,转成utf-8或GB2312都是不成功(%E5%BC%A0%E4%BF%9D%E5%BA%86) 解决办法: 使用:System.Web.HttpUtility.UrlDecode("%E5%BC%A0%E4%BF%9D%E5%BA%86", Encoding.UTF8)进行对url的解码就可以...
  • 解码

    2012-03-17 20:51:26
    import java.io.UnsupportedEncodingException; import java.net.URLDecoder;...//该类包含了将 String 从 application/x-www-form-urlencoded MIME 格式解码的静态方法。 public class DecoderExample { public
  • application/x-www-form-urlencoded与application/json当我们使用content-type=application/json...如果数据是简单、平面的key-value数值对,那么使用www-form-urlencoded简单实用,不需要额外的编解码;如果数据是复杂
  • Java: java.net.URLDecoder ...对x-www-form-urlencoded字符串解码。平台的默认编码用于确定任何"%xy"格式的连续序列表示的字符。 java.net.URLEncoder 该类包含了将String转换为ap...
  • URLEncoder和URLDecoder用于完成普通字符串和application/x-www-form-urlencoded MIME字符串之间的相互转换. 编码和解码:  在Web的浏览器中,不同的浏览器的编码和解码规则是不一样的.  对于W3C浏览器:遵循...
  • Java的Url编码和解码

    千次阅读 2014-02-25 22:16:19
    Java的Url编码和解码 在开始讨论编码解码之前,首先来明确一下问题。 什么是application/x-www-form-urlencoded字符串? 答:它是一种编码类型。当URL地址里包含非西欧字符的字符串时,系统会将...
  • 本质上来说,java.net.UrlEncoder适用于将 String 转换为 application/x-www-form-urlencoded MIME 格式的静态方法 时 ,使用 ...使用URLDecoder将所乱码的数据进行解码, 而在此处简单说一下乱...
  • 在开始讨论编码解码之前,首先来明确一下问题。什么是application/x-www-form-urlencoded字符串?答:它是一种编码类型。当URL地址里包含非西欧字符的字符串时,系统会将这些字符转换成application/x-...
  • 如果数据是简单、平面的key-value键值对,那么使用application/x-www-form-urlencoded简单实用,不需要额外的编解码 如果数据是复杂的嵌套关系,有多层数据,那么使用application/json会简化数据的处理 简单点说,...
  • UrlEncode 编解码

    千次阅读 2018-01-10 10:23:48
    Url编解码 URL编码(URL encoding),也称作百分号编码(Percent-encoding), 是特定上下文的统一资源定位符 (URL)的编码机制。 适用于统一资源标识符(URI)的编码,也用于为”application/x-www-form-urlencoded” ...
  • URL解码之URLEncoder

    2019-08-02 09:35:14
    关于URL解码看到了一篇易懂文章 什么是application/x-www-form-urlencoded字符串? 答:它是一种编码类型。当URL地址里包含非西欧字符的字符串时,系统会将这些字符转换成application/x-www-form-urlencoded字符串。...
  • URL编码与解码原理

    万次阅读 2018-08-22 20:20:16
    在开始讨论编码解码之前,首先来明确一下问题。 什么是application/x-www-form-urlencoded字符串? 答:它是一种编码类型。当URL地址里包含非西欧字符的字符串时,系统会将这些字符转换成application/x-...
  • 字符串url解码方式

    千次阅读 2017-03-28 15:07:52
    字符串url解码方式 msg = UrlEncoded.encodeString(msg, "UTF-8"); msg = URLDecoder.decode(msg, "UTF-8");
  • 摘要:URLDecoder 和 URLEncoder 用于完成普通字符串 和 application/x-www-form-urlencoded MIME 字符串之间的相互转换。在本文中,我们以使用URLDecoder解决GET请求中文乱码问题为场景说明 URLDecoder/URLEncoder ...
  • java中的url 编码与解码

    千次阅读 2019-08-01 11:00:23
    在开始讨论编码解码之前,首先来明确一下问题。 什么是application/x-www-form-urlencoded字符串? 答:它是一种编码类型。当URL地址里包含非西欧字符的字符串时,系统会将这些字符转换成application/x-...
  • utl解码问题

    2014-01-06 17:10:48
    使用URLDecoder和URLEncoder对中文进行处理 ...该类包含了将 String 转换为 application/x-www-form-urlencoded MIME 格式的静态方法。有关 HTML 格式编码的更多信息,请参阅 HTML 规范。 对 String 编
  • 具体的说: 大小写字母,数字 标点符号:- _ .!~*’(和,) 用于特定用途的符号:/ & ? @ # ; $ + = 和 % 其他所有字符均需要用%转义,特定...URL类不自动编码解码,但是由getPath和toExternalForm时候回出现错误。 java
  • java url编码与解码

    2014-12-08 16:19:09
    前言:这是我在做写接口时遇到的一个url编码与...什么是application/x-www-form-urlencoded字符串? 答:它是一种编码类型。当URL地址里包含非西欧字符的字符串时,系统会将这些字符转换成application/x-www-form-urle

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 188
精华内容 75
关键字:

urlencoded解码