`

HTTP码流与Jsp乱码问题的分析(二)

阅读更多

上一节我是用的GB2312编码方式的页面来测试的,这一节我用UTF-8页面来测试一下。

问题一

问题出现时环境:

1、以POST方式提交表单
2、请求的URL后还附加参数且参数值含有中文
3、附加参数值经过了encodeURIComponent()函数编码
4、Tomcat未设置URIEncoding与useBodyEncodingForURI
5、请求页面与结果页面<%@ page %>指令的contentType与pageEncoding编码方式都为UTF-8
6、结果页面中request的编码方式为UTF-8
 

请求utf-8.jsp与响应页面utf-8rs.jsp代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
	<body>
		<form name=form1 action="" method="post">
			<input type="text" name="textParam1" size="50 px" value="中a ~!@#$%^&amp;*()_+{}|:\&quot; &lt;&gt;?`-=[]\\;',./">
			<br>
			<input type="file" name="fileParam" size="50 px" value="">
			<br>
			<input type="button" value="submit" onclick="submitForm()">
		</form>
		<script type="text/javascript"> 
			function submitForm(){ 
				var str ="中a ~!@#$%^&*()_+{}|:\" <>?`-=[]\\;',./"; 
				form1.action = "utf-8rs.jsp?qryParam1=" + encodeURIComponent(str) + "&qryParam2="+  encodeURIComponent(form1.textParam1.value) ; 
				//form1.action = "http://localhost:8088/utf-8rs.jsp?qryParam1=" + encodeURIComponent(str) + "&qryParam2="+  encodeURIComponent(form1.textParam1.value) ;
				form1.submit(); 
			} 
		</script>
	</body>
</html>

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
	<head>
		<title>Insert title here</title>
	</head>
	<body>
		<%
			//这里一定要设置,且与浏览的提交时编码方式一样,否则乱码(默认Tomcat以iso8859-1解码) 
			//且只能post提交方式的参数起使用,对URL后附带参数不起作用 
			request.setCharacterEncoding("UTF-8");
			String textParam1 = request.getParameter("textParam1");
			String qryParam1 = request.getParameter("qryParam1");
			System.out.println("textParam1=" + textParam1);
			System.out.println("qryParam1=" + qryParam1);
			System.out.println("qryParam1=" + (qryParam1==null?null:new String(qryParam1.getBytes("iso8859-1"),"utf-8")));
		%>
		request.getParameter("textParam1")(<font color=red>UTF-8编码->UTF-8解码</font>):<br>
		<%=request.getParameter("textParam1")%>		
		<br><hr>
		request.getParameter("qryParam1")(<font color=red>UTF-8编码->ISO8859-1解码</font>):<br>
		<%=qryParam1%>
		<br><hr>
		new String(request.getParameter("qryParam1").getBytes("iso8859-1"),"UTF-8")(<font color=red>UTF-8编码->ISO8859-1解码->ISO8859-1编码->UTF-8解码</font>):<br>
		<%=new String(request.getParameter("qryParam1").getBytes("iso8859-1"),"UTF-8")%>		
		
	</body>
</html>

 

提交时地址栏显示:

http://localhost:8080/HttpStream/utf-8rs.jsp?qryParam1=%E4%B8%ADa%20~!%40%23%24%25%5E%26*()_%2B%7B%7D%7C%3A%22%20%3C%3E%3F%60-%3D%5B%5D%5C%3B'%2C.%2F&qryParam2=%E4%B8%ADa%20~!%40%23%24%25%5E%26*()_%2B%7B%7D%7C%3A%5C%22%20%3C%3E%3F%60-%3D%5B%5D%5C%5C%3B'%2C.%2F

码流:

POST /utf-8rs.jsp?qryParam1=%E4%B8%ADa%20~!%40%23%24%25%5E%26*()_%2B%7B%7D%7C%3A%22%20%3C%3E%3F%60-%3D%5B%5D%5C%3B'%2C.%2F&qryParam2=%E4%B8%ADa%20~!%40%23%24%25%5E%26*()_%2B%7B%7D%7C%3A%5C%22%20%3C%3E%3F%60-%3D%5B%5D%5C%5C%3B'%2C.%2F HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/QVOD, */*
Referer:
http://localhost:8080/HttpStream/utf-8.jsp
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.1.4322; aff-kingsoft-ciba)
Host: localhost:8088
Content-Length: 126
Connection: Keep-Alive
Cache-Control: no-cache

 

textParam1=%E4%B8%ADa+%7E%21@%23%24%25%5E%26*%28%29_%2B%7B%7D%7C%3A%5C%22+%3C%3E%3F%60-%3D%5B%5D%5C%5C%3B%27%2C.%2F&fileParam=

 

运行结果:

问题二

问题出现时环境:

1、以POST方式提交表单
2、请求的URL后还附加参数且参数值含有中文
3、附加参数值没有经过encodeURIComponent()函数编码
4、Tomcat未设置URIEncoding与useBodyEncodingForURI
5、请求页面与结果页面<%@ page %>指令的contentType与pageEncoding编码方式都为UTF-8
6、结果页面中request的编码方式为UTF-8

 

请求utf-8.jsp与响应页面utf-8rs.jsp代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
	<body>
		<form name=form1 action="" method="post">
			<input type="text" name="textParam1" size="50 px" value="中a ~!@#$%^&amp;*()_+{}|:\&quot; &lt;&gt;?`-=[]\\;',./">
			<br>
			<input type="file" name="fileParam" size="50 px" value="">
			<br>
			<input type="button" value="submit" onclick="submitForm()">
		</form>
		<script type="text/javascript"> 
			function submitForm(){ 
				var str ="中a ~!@#$%^&*()_+{}|:\" <>?`-=[]\\;',./"; 
				form1.action = "utf-8rs.jsp?qryParam1=" + (str) + "&qryParam2="+  (form1.textParam1.value) ; 
				//form1.action = "http://localhost:8088/utf-8rs.jsp?qryParam1=" + (str) + "&qryParam2="+  (form1.textParam1.value) ;
				form1.submit(); 
			} 
		</script>
	</body>
</html>

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
	<head>
		<title>Insert title here</title>
	</head>
	<body>
		<%
			//这里一定要设置,且与浏览的提交时编码方式一样,否则乱码(默认Tomcat以iso8859-1解码) 
			//且只能post提交方式的参数起使用,对URL后附带参数不起作用 
			request.setCharacterEncoding("UTF-8");
			String textParam1 = request.getParameter("textParam1");
			String qryParam1 = request.getParameter("qryParam1");
			System.out.println("textParam1=" + textParam1);
			System.out.println("qryParam1=" + qryParam1);
			System.out.println("qryParam1=" + (qryParam1==null?null:new String(qryParam1.getBytes("iso8859-1"),"utf-8")));
		%>
		request.getParameter("textParam1")(<font color=red>UTF-8编码->UTF-8解码</font>):<br>
		<%=request.getParameter("textParam1")%>		
		<br><hr>
		request.getParameter("qryParam1")(<font color=red>UTF-8编码->ISO8859-1解码</font>):<br>
		<%=qryParam1%>
		<br><hr>
		new String(request.getParameter("qryParam1").getBytes("iso8859-1"),"UTF-8")(<font color=red>UTF-8编码->ISO8859-1解码->ISO8859-1编码->UTF-8解码</font>):<br>
		<%=new String(request.getParameter("qryParam1").getBytes("iso8859-1"),"UTF-8")%>		
		
	</body>
</html>

提交时地址栏显示:

http://localhost:8080/HttpStream/utf-8rs.jsp?qryParam1=中a%20~!@#$%^&*()_+{}|:"%20<>?`-=[]\;',./&qryParam2=中a%20~!@#$%^&*()_+{}|:\"%20<>?`-=[]\\;',./

码流:

 

POST /utf-8rs.jsp?qryParam1=中a%20~!@ HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/QVOD, */*
Referer: http://localhost:8080/HttpStream/utf-8.jsp
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.1.4322; aff-kingsoft-ciba)
Host: localhost:8088
Content-Length: 126
Connection: Keep-Alive
Cache-Control: no-cache

 

textParam1=%E4%B8%ADa+%7E%21@%23%24%25%5E%26*%28%29_%2B%7B%7D%7C%3A%5C%22+%3C%3E%3F%60-%3D%5B%5D%5C%5C%3B%27%2C.%2F&fileParam=

 

运行结果:

问题三

问题出现时环境:

1、以get方式提交表单   
2、表单输入框中含有中文   
3、Tomcat未设置URIEncoding与useBodyEncodingForURI
4、请求页面与结果页面<%@ page %>指令的contentType与pageEncoding编码方式都为UTF-8
5、结果页面中request的编码方式为UTF-8

 

请求utf-8.jsp与响应页面utf-8rs.jsp代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
	<body>
		<form name=form1 action="" method="get">
			<input type="text" name="textParam1" size="50 px" value="中a ~!@#$%^&amp;*()_+{}|:\&quot; &lt;&gt;?`-=[]\\;',./">
			<br>
			<input type="file" name="fileParam" size="50 px" value="">
			<br>
			<input type="button" value="submit" onclick="submitForm()">
		</form>
		<script type="text/javascript"> 
			function submitForm(){ 
				var str ="中a ~!@#$%^&*()_+{}|:\" <>?`-=[]\\;',./"; 
				form1.action = "utf-8rs.jsp?qryParam1=" + encodeURIComponent(str) + "&qryParam2="+  encodeURIComponent(form1.textParam1.value) ; 
				//form1.action = "http://localhost:8088/utf-8rs.jsp?qryParam1=" + encodeURIComponent(str) + "&qryParam2="+  encodeURIComponent(form1.textParam1.value) ;
				form1.submit(); 
			} 
		</script>
	</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
	<head>
		<title>Insert title here</title>
	</head>
	<body>
		<%
			//这里一定要设置,且与浏览的提交时编码方式一样,否则乱码(默认Tomcat以iso8859-1解码) 
			//且只能post提交方式的参数起使用,对URL后附带参数不起作用 
			request.setCharacterEncoding("UTF-8");
			String textParam1 = request.getParameter("textParam1");
			String qryParam1 = request.getParameter("qryParam1");
			System.out.println("textParam1=" + textParam1);
			System.out.println("qryParam1=" + qryParam1);
			System.out.println("qryParam1=" + (qryParam1==null?null:new String(qryParam1.getBytes("iso8859-1"),"utf-8")));
		%>
		request.getParameter("textParam1")(<font color=red>UTF-8编码->UTF-8解码</font>):<br>
		<%=request.getParameter("textParam1")%>		
		<br><hr>
		request.getParameter("qryParam1")(<font color=red>UTF-8编码->ISO8859-1解码</font>):<br>
		<%=qryParam1%>
		<br><hr>
		new String(request.getParameter("qryParam1").getBytes("iso8859-1"),"UTF-8")(<font color=red>UTF-8编码->ISO8859-1解码->ISO8859-1编码->UTF-8解码</font>):<br>
		<%=new String(request.getParameter("qryParam1").getBytes("iso8859-1"),"UTF-8")%>		
		
	</body>
</html>

 

提交时地址栏显示:

http://localhost:8080/HttpStream/utf-8rs.jsp?textParam1=%E4%B8%ADa+%7E%21@%23%24%25%5E%26*%28%29_%2B%7B%7D%7C%3A%5C%22+%3C%3E%3F%60-%3D%5B%5D%5C%5C%3B%27%2C.%2F&fileParam=

码流:

GET /utf-8rs.jsp?textParam1=%E4%B8%ADa+%7E%21@%23%24%25%5E%26*%28%29_%2B%7B%7D%7C%3A%5C%22+%3C%3E%3F%60-%3D%5B%5D%5C%5C%3B%27%2C.%2F&fileParam= HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/QVOD, */*
Referer: http://localhost:8080/HttpStream/utf-8.jsp
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.1.4322; aff-kingsoft-ciba)
Host: localhost:8088
Connection: Keep-Alive

 

运行结果:

 

  • 大小: 9.5 KB
  • 大小: 8.1 KB
  • 大小: 8.8 KB
分享到:
评论

相关推荐

    jsp中文乱码的解决方案

    文档《JSP各种乱码的处理(一).doc》和《JSP各种乱码的处理(二).doc》中可能详细列举了各种JSP乱码问题的实例及解决方法,包括但不限于文件上传、读取流、数据库操作等方面,建议参考学习,以便更全面地理解并解决...

    javaweb servlet(jsp)的乱码问题原理及解决

    ### javaweb servlet(jsp)的乱码问题原理及解决 #### HTTP协议的基本理解与乱码问题背景 HTTP协议作为互联网应用中最为广泛使用的通信协议之一,它定义了客户端和服务端之间的交互规则。HTTP请求主要分为GET和...

    Java编程汉字乱码原因分析及解决方法研究.pdf

    同样,JSP文件在浏览器解析时,如果网页内容的编码与浏览器默认编码不符,也会产生乱码。 解决乱码问题通常需要以下几个步骤: 1. **源代码文件编码设置**:确保源代码文件(如.java文件)使用与IDE或编辑器相同的...

    java编码格式(对常见的java中文乱码作出分析及提出解决方案)

    运行时,JVM会根据系统环境变量`file.encoding`来解析字节码中的字符,如果该值与源文件编码不符,就会产生乱码。 解决Java中文乱码问题的关键在于理解和控制整个编码流程: 1. **源文件编码**:确保使用支持中文...

    jsp绝佳教程.PDF

    - **3.1.2 处理汉字信息**:解决中文乱码问题。 - **3.1.3 常用方法举例**:展示如何使用request对象的方法。 - **3.1.4 用户注册**:利用request对象收集用户的注册信息。 - **3.1.5 获取HTML表单提交的数据**...

    jsp 简易教程

    - **3.1.2 处理汉字信息**:设置正确的字符编码以防止乱码问题。 - **3.1.3 常用方法举例**:如`getHeader`, `getCookies`等。 - **3.2 response对象** - 控制向客户端发送的响应。 - 包括设置HTTP响应头、发送...

    java实现工作流

    - **JSP中文问题的解决**:设置正确的编码格式,避免中文乱码问题。 #### 结束语 通过以上内容可以看出,基于Java的工作流技术可以有效地提高固定电话装机业务的处理效率和服务质量。通过对工作流、MVC模式、JSP...

    JSP教程——必看.pdf

    - **3.1.2 处理汉字信息**:解决中文乱码问题,通常需要设置正确的编码。 - **3.1.3 常用方法举例**:例如使用`getHeader()`获取HTTP头部信息。 - **3.1.4 用户注册**:通过`request`对象收集用户的注册信息。 -...

    jsp 教程

    - **3.1.2 处理汉字信息**:由于编码问题,需要正确设置编码以避免乱码。 - **3.1.3 常用方法举例**:例如使用`getParameter()`方法获取表单字段值。 - **3.1.4 用户注册**:利用request对象处理用户提交的注册...

    Java 编程技术中汉字问题的分析及解决

    在Java编程技术中,汉字问题主要涉及到编码的处理和转换,因为Java的默认编码是UNICODE,而我们日常使用的文件和数据库可能采用GB2312或BIG5等编码方式。这种差异可能导致在读写汉字时出现乱码,影响程序的正常运行...

    JavaEE物联

    此外,还会学习如何处理JSP中文乱码问题,使用JSP标签和JavaBean。 5. **JavaWEB高级开发技术**:包括Servlet过滤器和监听器的使用,以及JSP标签和行为元素。此外,课程还将讲解WebService、云计算、工作流、搜索...

    java web技术开发大全(最全最新)

    提供典型应用案例,剖析JSP/Servret技术与Struts 2技术在Web开发中的不同 提供完整的应用案例,使读者可以深入体会SSH开发模式的精髓 所有开发工具和框架均使用目前的最新版本,紧跟技术发展的趋势 提供230个实例和4...

    网上书店系统设计与实现_毕业论文

    本文将详细探讨基于Java和JSP技术的网上书店系统的设计与实现过程,旨在解决传统书店业务中存在的一系列问题,如工作量大、效率低下、人力成本高等,通过整合资源,实现读者与商家的双赢局面。 ### 技术概览 #### ...

    《web应用与开发》课程设计题目--2015.pdf

    标题《web应用与开发》课程设计题目--2015,表明这是一份针对某年份的课程设计作业,其主要焦点在于与Web相关的应用和开发。从描述中可以看出,文档内容可能围绕Web应用开发的多个关键方面进行展开,但由于描述与...

    java web开发技术大全

    提供典型应用案例,剖析JSP/Servret技术与Struts 2技术在Web开发中的不同 提供完整的应用案例,使读者可以深入体会SSH开发模式的精髓 所有开发工具和框架均使用目前的最新版本,紧跟技术发展的趋势 提供230个实例...

    Java面试重要知识点复习大纲.pdf

    5. **IO流**:理解流的分类(字节流、字符流)、流向(输入流、输出流),熟悉BufferedReader、BufferedWriter、FileInputStream、FileOutputStream等常用流对象。 **二、Web基础** 1. **HTTP协议**:掌握HTTP的...

    Java面试重要知识点复习大纲.docx

    4. **SpringMVC**:了解其工作流程,对比与Struts2的区别,处理乱码问题,熟悉各组件的扩展。 5. **MyBatis**:理解MyBatis与JDBC和Hibernate的区别,熟悉动态SQL和映射文件的配置。 **四、脚本** 1. **JavaScript*...

    人力资源管理系统论文

    - **中文乱码问题:**在处理中文数据时可能会遇到乱码问题,解决方法通常包括设置正确的字符集编码。 - **图片处理:**对于包含图像的数据,需要处理图像的上传、存储和显示等问题。 - **HQL语言:**Hibernate Query...

    金蝶OA百问百答

    - **问题描述**:对工作流模块中常见的错误信息进行分析。 - **解决方法**:提供错误代码对照表,帮助用户快速定位问题原因。 #### 五、其他模块应用篇 ##### 5.1 为什么用户、部门及角色不能删除 - **问题描述**...

Global site tag (gtag.js) - Google Analytics