当我们想要在URL上传递中文参数的时候,我们需要进行URLEncode.code("中文参数"),然后才能在URL上正确的进行传递参数(注意:因为当我们提交表单的时候,表单中的参数也是会自动调用URLEncode.code("中文参数")为我们编码,这样就会产生一个%xy,xy是16进制的数据),所以当我们要在url上传递参数login?userName="中文参数",这事就应该这样写:
resp.sendRedirect("login?userName=" + URLEncoder.encode("犀利哥", "utf-8"));
//只用经过编码的中文才能正确的在url上传递参数。
当我们经过以上处理之后则可以在另一个响应页面获取数据,也就是req.getparameter("userName"),一般我们的做法是很自然的就是直接按照上面的方式去获取参数,然后在解码:
String userName = req.getparameter("userName");
System.out.prinln(URLDecode.code(userName,"UTF-8"));
用以上的方式,想法是很好的,因为我们都是这样想的,在页面的一头去URLEncode.code("中文参数","UTF-8");去编码在接收页面用URLDecode.code("中文参数","UTF-8");去解码,然后都是按照UTF-8的格式去编码和解码,应该可以解码出正确的字符吧!!!但是结果却是这样的:
é????????
是不是很失望,中文乱码!!!
回过头来看看其实我们都错了,其实错在我们都不明白,当我们使用req.getparameter("userName");的时候,服务器已经帮我们解码了,它是怎么解码的呢?
TOMCAT帮我们这样解码了URLDecode.code(userName,"ISO-8859-1")所以我们获得的是一个使用了UTF-8去编码,但是却是以ISO-8859-1
去解码的的文字,然后得出的文字能不是乱码吗?我们req.getparameter("userName");的时候所得到的已经是解码
过后的文字,所以我们再去解码,当然没有任何意义,因为已经不是%xy这种形式的数据,所以我们的解码是无意义的,
(URLDecode.code()只会去解码%xy这样的数据),所以我们打印出来的就是乱码。那好,那要怎么解决呢?
这就是乱码的问题了,怎么解决乱码呢?因为服务器已经帮我们解码,而且是以ISO-8859-1解码的,所以我们要逆向
编码回去获得字节码也就是:
Bytes[] byte = req.getparameter("userName").getBytes("ISO-8859-1")//获得字节码
//然后再根据UTF去解码数据
String userName = new String(byte,"UTF-8" );
System.out.println(userName);
//这样 犀利哥 就出来了!
通过以上步骤,就能正确的解码了,其实get的方式的乱码都是由上面产生的,了解了这个,也就了解了get方式产生乱码
的原因,也就能过顺利的解决get乱码问题。(记住get的方式与URL有关,而URL都要经过URLEncode和URLDecode)
其实对于get方式产生的乱码我们还可以通过更改服务的默认编码解码方式也就是在
- <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"
- URIEncoding="UTF-8" />
这样以来get传递方式都是以UTF-8编码方式去编码了!
分享到:
相关推荐
### Java解决GET请求中文乱码问题详解 在Java Web开发中,经常遇到的一个问题是处理GET请求中的中文参数时出现乱码。这个问题主要是因为浏览器发送GET请求时,参数默认使用ISO-8859-1编码格式,而服务器端通常采用...
jsp中文乱码问题详解 在jsp中文乱码问题中,乱码的出现是由于编码格式不一致所导致的。在jsp文件中,存在三个地方的编码格式:jsp文件的存储格式、解码格式和控制浏览器的解码方式。如果这三个地方的编码格式不一致...
### 帆软V9getshell1:任意文件覆盖与JSP Web Shell植入详解 #### 一、背景介绍 帆软软件有限公司(FineSoft)是中国领先的企业级报表工具及商业智能解决方案提供商,其核心产品之一为FineReport报表设计工具。在...
### 知识点详解:JSP页面中文参数传递GET与POST方法分析 #### 一、引言 在Java Web开发中,特别是在处理JSP页面时,中文参数的正确传递是常见的需求之一。不当的处理可能导致乱码问题,严重影响用户体验和数据的...
根据题目中的描述,“Ajax乱码:当调用`request.getParameter()`函数时,会自动进行一次URI的解码过程,调用时内置的解码过程会导致乱码出现。而URI 编码两次后,`request.getParameter()`函数得到的是原信息URI编码...
《详解JSP内置对象request的常见用法》 在Java Web开发中,JSP(JavaServer Pages)提供了几个内置对象,极大地简化了开发者的工作。其中,`request`对象是核心之一,它扮演着处理HTTP请求的重要角色。本文将深入...
**JSP编码与乱码问题详解** 在JSP(JavaServer Pages)开发中,编码问题是一个常见的困扰,尤其是在处理中文字符时。本文将深入探讨JSP编程过程中出现的乱码问题,包括原因分析和解决方案。 1. **基本的乱码问题**...
浏览器接收到这个信息后,会自动发起一个新的GET请求到location头指定的地址。 - 在示例代码中,`response.sendRedirect("list")`就是执行重定向操作,将用户引导到“list”页面。 2. **HTTP请求处理** - `...
【Java面试知识点详解】 在Java面试的第18天,我们关注的是Web开发基础和处理中文乱码的问题,这些知识点对于Java程序员尤其重要,尤其是在进行Web应用开发时。 1. **HTTP协议**: HTTP(超文本传输协议)是...
### JS的encodeURI和Java的URLDecoder.decode使用详解 #### 一、背景介绍 在网络通信过程中,URL(统一资源定位符)作为传输信息的一种常见方式,其安全性与隐私性问题一直备受关注。为了提高URL的安全性和隐私性,...
"基于java Servlet编码/异常处理详解" 本文将详细介绍基于java Servlet编码和异常处理的相关知识点。 Servlet输出中文输出 在Servlet中输出中文时,可能会出现乱码问题。之所以会出现乱码,是因为浏览器会对表单...
#### 解决方案详解 1. **统一JSP文件的编码** 在JSP文件中,可以通过声明`<%@ page language="java" pageEncoding="UTF-8" %>`, 这一行指定了JSP文件本身的编码格式为UTF-8,即文件存储的编码。如果没有其他指定...
### 文件下载功能实现详解 #### 一、概述 在日常的Web开发中,经常会遇到需要让用户下载文件的需求,比如PDF文档、图片等。本篇文章将详细介绍一个基于Java Servlet的文件下载功能实现方法,并通过分析提供的代码...
- 对于GET请求中的中文参数,可以使用以下方法进行解码: ```java String str = request.getParameter("param"); String decodedStr = new String(str.getBytes("ISO-8859-1"), "UTF-8"); ``` - 或者修改...
JSP内置对象是自动创建的对象,无需程序员显式实例化即可直接使用。 #### 二、九大JSP内置对象介绍 1. **out**:用于向客户端输出数据,如HTML、文本等。 2. **request**:代表客户端发送的HTTP请求,类型为`...
例如,`getParameter(String name)`用于获取请求参数的值,`getHeader(String name)`用于获取请求头的值,`getLocale()`用于获取客户端的首选语言等。 HttpServletResponse接口则是响应的载体,它提供了设置状态码...
`PageContext`对象的创建和初始化是由容器自动完成的。 1. **PageContext对象**的作用在于提供了一个统一的接口来访问所有的JSP内置对象。通过`PageContext`对象,开发者可以方便地访问和设置各种属性,从而更高效...
### WML中文乱码问题详解 #### 一、引言 在进行WAP(Wireless Application Protocol)开发过程中,中文乱码问题是开发者经常会遇到的问题之一。尤其是在早期的移动互联网技术中,WML(Wireless Markup Language)...
### Struts乱码问题详解与解决方案 #### 一、引言 在Web开发过程中,特别是在使用Struts框架进行开发时,经常会遇到字符编码的问题,尤其是中文字符的乱码问题。本文将详细介绍Struts中常见的乱码现象,并提供具体...