问题发生于,我想用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"));
输出结果为
支?金?合?
正确结果应该为
支払金額合計
于是使用
System.out.println(URLEncoder.encode("支払金額合計","windows-31j"));
把这几个字符编码了一下,得到的结果是
%8E%78%95%A5%8B%E0%8A%7A%8D%87%8C%76
和上面的比较了一下确实有些不一样
下面几个编码好像变成了字幕
%78 ->x
%7A ->z
%76 ->z
用下面代码解码一下也确实如此
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"));
至于为什么,查看一下两个类的源代码就一清二楚了。
至于为什么要这样做,我想是出于减少浏览器和服务器之间的传输数据量的考虑。
分享到:
相关推荐
本文将详细讲解 Java 编码互转的相关知识点,包括 URL 编码、URL 解码、application/x-www-form-urlencoded MIME 格式、UTF-8 编码机制、HTML 格式编码等。 URL 编码 Java 中的 URL 编码是通过 URLEncoder 类来...
为此,我们需要在发送请求前设置`Content-Type`头部,例如设置为`"application/x-www-form-urlencoded; charset=utf-8"`,确保数据以正确的编码发送。在JavaScript中,可以这样做: ```javascript var xhr = new ...
相反,`URLDecoder`类提供了`decode`静态方法,用于将`application/x-www-form-urlencoded` MIME格式的字符串解码回原始的普通字符串。解码过程会反转`encode`操作,将百分号序列转换回对应的字符。同样,解码也需要...
在使用HttpURLConnection时,需要设置请求头`Content-Type`为`application/x-www-form-urlencoded;charset=UTF-8`,确保服务器知道数据的编码方式。示例代码如下: ```java URL url = new URL(...
对于`application/x-www-form-urlencoded`类型的数据,Tomcat会尝试使用请求头中的`Charset`来解码数据,如果没有指定,则默认使用ISO-8859-1。对于`multipart/form-data`,每个部分的边界内会有编码信息。 然而,...
1. **设置请求头编码**:在发送Ajax请求时,确保设置Content-Type为`application/x-www-form-urlencoded; charset=UTF-8`,例如: ```javascript j$.ajax({ type: "get", url: "add_form_do.jsp", contentType...
通过查看日志,我们可以看到Feign成功地以`Content-Type: application/x-www-form-urlencoded`的形式发送了表单数据,证明了Form表单提交的正确性。 参考官方文档和StackOverflow上的讨论,我们可以了解到更多关于...
服务器端在接收到这些编码值后,需要通过`System.Web.HttpUtility.UrlDecode()`函数将其解码回原始的中文字符。 服务器端的处理逻辑如下: 1. 从请求中获取`folderId`、`folderName`和`custId`。 2. 使用`Url...
在这个示例中,通过设置`Content-Type`为`application/x-www-form-urlencoded; charset=UTF-8`,指明了请求体的编码方式,使得服务端能够按照正确的字符集解码。 #### 三、补充知识:使用Request Payload翻页获取...
此外,工具包可能还提供了对URL编码和解码的支持,以正确处理特殊字符。 图片处理部分,`HttpUtil`可能包含图片的加载和缓存机制。在Android开发中,这可能涉及到使用像Glide、Picasso或Volley这样的库来下载、缓存...
- GET方式的乱码处理:由于GET方式的请求参数包含在URL中,所以需要通过解码后再编码的方式处理乱码,如: ```java String value = request.getParameter("username"); String out = new String(value.getBytes...
r.Header.Set("Content-Type", "application/x-www-form-urlencoded") user := User{} formam.Decode(r.Form, &user) fmt.Println(user.Name) // 输出: John fmt.Println(user.Email) // 输出: john@example....
- 参数编码:客户端对POST数据进行编码,比如在Java中使用`URLEncoder.encode()`,在JavaScript中使用`new Blob([data], {type: 'application/x-www-form-urlencoded;charset=utf-8'})`。 - 服务器端接收:服务端...
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); // 对中文数据进行两次encodeURI编码 xmlhttp.send("name=" + encodeURI(encodeURI("中文"))); ``` 2. **服务器端解码**: ...
在 FORM 方式中,我们可以使用 enctype="application/x--form-urlencoded" 来传递中文参数。 例如,假设我们有一个 FORM: ```html <form action="./MyJsp2.jsp" method="post" enctype="application/x--form-...
在jQuery的`$.ajax`或`$.post`方法中,默认的`contentType`是`application/x-www-form-urlencoded`,但没有指定字符集,这会导致数据以ISO-8859-1编码发送,不支持中文字符。要解决这个问题,我们需要在Ajax请求中...
JQuery的默认`contentType`是`application/x-www-form-urlencoded`,在没有明确指定字符集的情况下,它会采用ISO-8859-1(Latin-1)编码,这个编码并不包含完整的中文字符,因此在传输含有中文字符的数据时会出现...
该库旨在允许以application/x-www-form-urlencoded格式和格式对任意数据进行无缝,高保真编码和解码。 它主要用于处理Web表单和URI查询字符串,这两者都本机采用所述格式。 毫不奇怪, form是在其他Go 包(尤其是...
2. **正确设置Ajax请求头**:在使用jQuery的Ajax方法时,应明确指定`Content-Type`为`application/x-www-form-urlencoded; charset=UTF-8`,以确保传输过程中的字符编码正确。 ```javascript $.ajax({ url: "/...
请求头可能包含如Content-Type这样的字段,用于指示请求体的数据类型,例如"application/x-www-form-urlencoded"或"multipart/form-data"。对于文件上传,后者更常见。如果在请求头中没有指定正确的字符集,服务器...