本文为原创,如需转载,请注明作者和出处,谢谢
有个朋友写JSP程序时,在Servlet中取请求参数时出现了乱码,当然,这种乱码问题再简单不过了。由于在JSP中使用了GBK作用页面的编码,那么提交的中文信息自然也会被按着GBK进行编码,为%xx格式的GBK编码。
要解决这个问题可以说是方法多多。最简单的就是使用request.setCharacterEncoding方法设置编码格式,如下面的代码所示:
request.setCharacterEncoding("GBK");
在设置完编码格式之后,就可以直接通过request.getParameter方法来获得请求参数中的中文信息了。当然,为了方便,还可以在过滤器中加入上面的语句,这样所有的Servlet都可以直接使用 request.getParameter方法来获得请求参数中的中文信息了。 除了这两种方法,还可以不使用request.setCharacterEncoding("GBK"),而使用下面的语言来转换编码:
String name = new String(request.getParameter("name").getBytes("ISO-8859-1"), "GBK");
但为了更快解决这个问题,我就直接告诉这位朋友使用了setCharacterEncoding方法来设置编码。但是说来奇怪,还是出现乱码,没有任何解决问题的迹象。 最郁闷的事就是使用了自己认为100%能解决问题的方法,而这种方法却一点都没起作用。
最后又让朋友试了最后一种方法,说来奇怪,竟然好使了。当然,这也没什么可奇怪的,本来就应该好使,但奇就奇在setCharacterEncoding方法并没有去掉,也就是说,同时使用了下面两条语句,竟然得到了正常的中文请求参数值:
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->request.setCharacterEncoding("GBK");
Stringname=newString(request.getParameter("name").getBytes("ISO-8859-1"),"GBK");
System.out.println(name);//正常输出中文请求参数
按着常理来说,这是不可能的,既然使用了setCharacterEncoding方法设置成了GBK,再使用new
String(request.getParameter("name").getBytes("ISO-8859-1"),
"GBK")来转换,得到的应该是?????,不可能是正常的中文,只有将setCharacterEncoding方法去了,以ISO-8859-1格
式保存的字符串才可以用ISO-8859-1格式还原,再用GBK重新保存成Java字符串(这一步实际上就是GBK转Unicode)。
但经过仔细思考后,决定看下JSP代码是如何写的。不看不知道,一看吓一跳,原来<form>在提交时使用的是GET,而未用POST,这当
然没什么了不起的,用什么都可以,但对编码就有问题了。自从Tomcat5.x开始,GET和POST方法提交的信息,Tomcat采用了不同的方式来处
理编码,对于POST请求,Tomcat会仍然使用request.setCharacterEncoding方法所设置的编码来处理,如果未设置,则使
用默认的iso-8859-1编码。而GET请求则不同,Tomcat对于GET请求并不会考虑使用request.setCharacterEncoding方法设置的编码,而会永远使用iso-8859-1编码,而这位朋友使用的正好是GET请求,因此,tomcat将会使用iso-8859-1将提交的字节转换成字符串。
解决的方法有两个:
1. 将GET请求改成POST请求,然后就可以使用request.setCharacterEncoding方法设置编码,并使用request.getParameter方法直接获得中文请求参数了。
2. 不用改GET请求,在Servlet中使用如下的代码来得到中文请求参数。
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->Stringname=newString(request.getParameter("name").getBytes("ISO-8859-1"),"GBK");
综上所述,如果使用了GET请求,则setCharacterEncoding方法不起作用,只能使用上面的代码来解决,而使用POST请求,尽管setCharacterEncoding
方法起作用,但使用上面的代码仍然好使(在这时不能使用setCharacterEncoding方法将编码格式设置成非iso-8859-1格式)。因
此,如果想让Servlet可以同时处理GET和POST请求中的中文信息,除了判断这两种方法外,还可以使用上面的代码来同时处理这两种请求的中文信
息。
笔者建议使用如下的代码来获得中文请求参数:
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->Stringname=newString(request.getParameter("name").getBytes("ISO-8859-1"),"GBK");
因为上面的代码是利用了Java的编码能力,对于所有的Web服务器都会有效,而setCharacterEncoding方法是通过Web服务器支持的,并不是所有的Web服务器都会对该方法有很好的支持。
分享到:
相关推荐
在 Tomcat 中,Get 和 Post 方法都可能出现乱码问题,这主要是由于编码问题引起的。在本文中,我们将详细介绍 Tomcat 中 Get 和 Post 方法出现乱码的解决办法。 一、乱码问题的出现 在 JSP 程序中,当我们使用 GET...
解决 POST GET 请求乱码问题 在 Web 开发中,POST 和 GET 请求可能会出现乱码...解决 POST 和 GET 请求乱码问题需要对服务器和应用程序进行配置和编码处理。在实际开发中,我们需要根据具体情况选择合适的解决方法。
浏览器在构建这个URL时,会按照默认的字符集(非UTF-8)对中文参数进行编码,而Spring MVC在处理请求时,默认可能并未正确设置解码方式。 2. 字符编码:HTTP协议允许服务器和客户端之间约定字符编码,但如果没有...
在处理POST请求时,确保调用`setCharacterEncoding`方法;处理GET请求时,需要手动对URL参数进行解码。同时,配置服务器的编码设置也是避免乱码的有效手段。通过这些方法,可以有效地解决Web开发中的中文乱码问题。
本文主要讨论如何解决Tomcat在处理GET提交请求时出现的乱码问题。 首先,我们要明白GET请求与POST请求的区别。GET请求通常用于获取资源,而POST请求则用于向服务器发送数据。对于POST请求,Spring框架提供了`...
在Spring MVC框架中,处理POST和GET请求时可能会遇到中文乱码的问题,这通常是由于字符编码设置不正确导致的。本文将详细阐述如何解决这些问题。 首先,我们需要理解HTTP请求中的编码原理。HTTP协议本身并不规定...
在Web应用开发过程中,中文字符编码问题一直是个常见的技术难题,尤其是在处理HTTP请求中的POST和GET方法时。对于使用Apache Tomcat服务器的应用程序来说,确保中文字符正确编码是提升用户体验、避免数据损坏的关键...
在IT行业中,尤其是在Java Web开发领域,Tomcat服务器在处理中文字符时经常遇到乱码问题。这主要涉及两个方面:JSP页面显示中文乱码和表单提交乱码。为了解决这些问题,我们需要理解字符编码的基本原理,并采取相应...
Java中的乱码问题是一个常见的编程挑战,特别是在处理网络请求(如GET和POST)时。本文将深入探讨如何解决这些问题,并且不局限于特定的请求类型。首先,我们需要理解字符编码的基本概念,然后分析Java中可能出现...
Tomcat和WebLogic中文乱码问题解决方案 在 Java Web 开发中,中文乱码问题一直是困扰开发者的主要问题之一。 Tomcat 和 WebLogic 是两个常用的 web 服务器,都是支持 Servlet 和 JSP 的。然而,在使用这些服务器时...
通过上述步骤,无论用户提交的数据是以GET还是POST方式发送的,都能正确地以GBK编码进行解码,从而避免乱码问题。 #### 三、额外处理 对于某些特殊情况,如直接从数据库中读取中文数据时也可能遇到乱码问题。此时...
### 解决Tomcat中文乱码问题的详尽指南 ...以上步骤和技巧覆盖了在Tomcat环境下处理中文乱码的主要场景,遵循这些建议可以有效避免或解决中文乱码问题,确保中文字符在Web应用中的正确展示和处理。
然而,在处理中文字符时,可能会遇到乱码问题。这个问题通常涉及到字符编码的设置和处理,尤其是对于从表单提交的数据。下面我们将深入探讨如何解决J2EE环境下GET和POST方式提交表单时出现的乱码问题。 首先,我们...
然而,中文乱码问题一直是困扰开发者的一个常见问题,特别是在处理POST和GET请求时。以下是对标题和描述中涉及知识点的详细解释: 1. **StrutsPrepareAndExecuteFilter**: Struts2框架中的`...
通过对Tomcat服务器的适当配置,可以有效地解决`request.getParameter`方法在处理中文参数时出现的乱码问题。具体而言,通过在`server.xml`文件中修改`Connector`元素的相关属性,以及在程序中设置合适的字符编码,...
在Java开发中,乱码问题是开发者常遇到的挑战之一,尤其是在处理多语言、跨平台应用时更为显著。本文将深入探讨Java开发中常见的乱码问题及其解决策略,帮助你迅速掌握处理乱码的技巧,提升开发效率。 #### 一、...
在Java Web开发中,字符编码问题常常困扰着开发者,尤其是当涉及到HTTP请求的处理时。标题和描述中提到的问题——"JAVA过滤器filter request.setCharacterEncoding仅对POST提交起作用,对GET提交还是会出现乱码问题...
Tomcat中文乱码处理方法是指在使用Tomcat服务器时,遇到中文乱码问题的解决方法。中文乱码是指在网页中显示的中文字符被错误地显示为乱码,影响用户体验和网站的可读性。 第一种解决方法是通过contentType、...
在本文中,我们将详细介绍乱码问题的原因、类型和解决方法。 一、编码不一致的原因 编码不一致是乱码问题的主要原因。编码不一致可能出现在多个方面: * 页面编码:jsp 默认 iso8859-1 * 服务器编码:tomcat 默认...