最近在某个项目的开发过程中碰到了关于HTTP请求中的参数编码问题。由于原本团队的开发的项目中所使用的编码都是GBK(个人觉得这是万恶之源),而团队最近又在开发一个完全独立于原项目的新项目,而在这个项目中又都是使用了UTF-8,于是碰到了一些编码转换上问题。
具体的问题场景:
客户端需要发送异步请求(起初使用GET方式)给后台,请求的参数里面包含了中文字;后台在服务端接受到的参数内容的编码会根据客户端所使用浏览器不同而不同。譬如,我在网页程序中含有异步提交含有中文的字符串的逻辑,当你分别使用IE和Chrome访问该页面,并调用请求时,服务器所接受到的请求中参数的编码不同,我们的项目中,通过IE提交的异步请求在服务器端接收到的参数编码形式为GBK,而通过Chrome提交的异步请求在服务器端接收到的参数编码形式为UTF-8。于是,我从几个方面去定位问得原因:
在异步请求即XHR中添加设置编码的头部信息:
var object = XHR();// XHR()根据具体浏览器返回相应的异步请求对象
object.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded charset=utf-8');
的确,在网上搜索很多异步请求编码相关的问题都能够用这种方法解决,但是在我这次所碰到的问题上,这个方法并不奏效。在添加了设置异步请求编码形式的头之后,服务器所收到的异步请求的参数编码形式依然为GBK。
改变异步请求的方式(由原来的GET变为POST):
当我尝试使用POST方法来提交同样的请求参数,服务器所接收到的异步请求的参数就不再有编码的区别。
到底是什么原因导致我们在使用GET方法发送异步请求时产生了参数编码问题呢:
于是我又一次尝试了GET方法发送异步请求,但在请求发送之前利用JavaScript原生的encodeURI()(http://www.w3schools.com/jsref/jsref_encodeuri.asp)方法对异步请求的URI进行编码,即将链接用UTF-8编码,于是问题同样也被解决了。
于是,我猜想导致这个问题的原因是由于通过头部添加编码控制所能够影响的仅仅是HTTP请求的内容。当HTTP请求的参数是通过POST方式传输时,参数会在HTTP请求的内容中被传输,其编码受到HTTP头部控制,当HTTP请求的参数是通过GET方式传输时,参数会在HTTP请求的URI中被传输,其编码并不受HTTP头部控制而由浏览器全权控制。
下面是本人编写一个例子:
测试DEMO
分别在IE和Chrome下打开测试页面,输入中文,提交后数据会通过GET方式传输,当请求返回时Display内会展示异步请求返回的数据。下面是在浏览器下不同情况的结果:
|
设置头部编码
|
未设置头部编码
|
对参数进行与编码
|
未对参数进行与编码
|
IE
|
乱码
|
乱码
|
正常
|
乱码
|
Chrome
|
正常
|
正常
|
正常
|
正常
|
[转自:http://lison.sinaapp.com/?p=198]
分享到:
相关推荐
这个修改过的jar文件应该包含了修复乱码问题的更新,可能是调整了请求参数的编码处理逻辑,使其能够正确识别和处理中文字符。用户只需将此修改后的`ApacheJMeter_http.jar`文件放到JMeter安装目录下的`lib/ext`子...
在后端Java代码中,处理请求参数时可能会遇到乱码问题。例如,使用`request.getParameter("params")`获取参数时,如果请求时的编码和服务器端解析的编码不一致,就会出现乱码。在本例中,服务端代码使用了`...
总的来说,解决C++使用CHttpConnect类进行HTTP文件上传时的中文参数乱码问题,关键是确保正确地编码请求头和请求体,以及正确地处理服务器的响应。通过遵循这些步骤,并检查每个环节的编码和解码过程,你可以成功地...
问题可能出在服务器端,特别是当服务器配置为使用其他编码解析请求参数时。例如,在使用Struts框架的情况下,可能需要在Struts配置文件(struts-config.xml)中进行相应调整: ```xml ``` 确保服务器接收并...
在处理Ajax GET请求中文参数乱码时,关键是确保客户端和服务器端在编码和解码过程中的一致性。通过理解HTTP协议的编码规则和Web开发中的字符编码原理,可以有效地避免此类问题的发生。在提供的压缩包文件`strtus-...
总的来说,解决HTTP请求中的中文乱码问题,核心在于正确地设置编码格式,并在发送请求前对中文数据进行编码。无论是GET还是POST请求,都需要确保客户端和服务器之间对字符编码的一致理解。通过阅读提供的文档和示例...
然而,当GET请求的参数包含中文字符时,由于编码格式不一致或者处理不当,可能会出现中文乱码的问题。本篇文章将详细介绍如何快速解决这一问题。 首先,我们需要理解乱码产生的原因。在HTTP请求中,URL(统一资源...
在进行HTTP请求时,如果请求参数或响应内容中含有中文字符,这些中文字符在传输过程中可能会被编码为不同的格式。如果接收方解码的方式与发送方编码方式不一致,则会出现乱码现象。通常情况下,HTTP请求中的中文乱码...
这个问题主要是因为URL中的参数可能没有经过正确的编码和解码处理。为了解决这个问题,我们可以采取一些方法,特别是当使用jQuery来获取URL参数时,有以下两种方法特别有效。 方法一是利用正则表达式来匹配和解析...
4. **URL编码**:对于URL中的中文参数,需要使用`encodeURIComponent()`函数进行编码,将中文字符转换为%XX形式,确保浏览器能够安全地传输。 5. **编码转换**:如果服务器无法更改,可以考虑在客户端进行编码转换...
这样,服务器在解析GET请求参数时会使用正确的字符编码,避免乱码问题。 3. **Servlet处理**: 在Servlet中,你需要正确处理接收到的GET请求参数。`HttpServletRequest`的`getParameter()`方法默认会按照服务器...
经过查找资源,发现大部分浏览器,中文一般会先转码为utf-8,此时,idHttpServer控件会根据请求头中ContentType的Chatset进行相应的转码,以形成正确的参数。但奇怪的是,控件没有取到这个值,因此,就用默认的...
C++post请求的时候中文参数,导致传到服务器乱码,这种异常的处理。也就是如何解决POST中文参数 解释可以参考https://blog.csdn.net/gemo/article/details/8468311 这里提供成功代码
因此,当它尝试以UTF-8解码接收到的请求参数时,如果数据实际使用了ISO-8859-1编码,中文字符就会显示为乱码。 为了解决这个问题,可以在客户端对中文参数进行URL编码,然后在服务器端进行解码。在Android客户端,...
通过上述方法,我们可以有效地解决在使用ExtJS进行Ajax同步请求时,中文参数出现乱码的问题。关键是保证前后端编码的一致性,以及正确地使用编码与解码函数。此外,还可以考虑在服务器端配置文件中设置统一的字符集...
在Java开发中,请求参数过滤拦截是一个至关重要的环节,它涉及到系统的安全性、稳定性和数据的正确性。这里的“java请求参数过滤拦截”主要是指在接口接收到用户输入的数据时,通过过滤器(Filter)对参数进行检查,...
为了防止乱码问题,开发者应该确保在整个数据传输过程中使用统一的字符编码。最常见的是使用UTF-8编码,因为它支持全球范围内的字符集,且是互联网上最广泛使用的编码格式。 #### 2. 正确解码请求参数 在服务器端,...
在Web开发中,中文字符的乱码问题是一个常见的问题,特别是在使用DOGET和DOPOST请求时。今天,我们将讨论DOGET和DOPOST中文乱码问题的解决方案。 DOGET和DOPOST请求中的中文乱码问题 在使用DOGET和DOPOST请求时,...
Android客户端发送请求中文乱码问题是指在Android客户端向服务器端提交请求时出现的中文乱码问题,这是由于在HTTP请求中,中文字符被编码为乱码字符所致。为了解决这个问题,我们可以从两个方面入手:客户端编码和...