`
ictch
  • 浏览: 135402 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

编码问题:request.getParameter乱码

    博客分类:
  • Java
阅读更多

http请求是以ISO-8859-1的编码来传送url的
如果页面的content-type为utf-8,那么在发送请求时,会将字符转成utf-8后进行传送
如: 中 的UTF-8编码为:E4 B8 AD在请求时为%E4%B8%AD字节之间是%分隔
那么服务器收到这段字节流后,必须将它转成相应的字符,平时所使用的request.getParameter("name")直接得到了字符串,
那么从字节流到字符流这个过程系统己经帮助我们完成了(乱码的产生由此开始)

类似下面的程序:将汉字"中"的UTF-8形式转成汉字
public class EncodingTest {

public static void main(String[] args) {
  
   String utf_string = "E4%B8%AD";//中的UTF-8编码,三个字节表示,用%分开
   String[] utf_array = utf_string.split("%");
   byte[] utf_byte = new byte[utf_array.length];
   for(int i=0;i<utf_array.length;i++){
    utf_byte[i] = (byte)Integer.parseInt(utf_array[i], 16);
   }
   try {
    System.out.println(new String(utf_byte,"UTF-8"));
   } catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
}
}
请注意段代码:new String(utf_byte,"UTF-8")它将字节流以UTF-8的编码还原为字符串
但它使用的前提条件是utf_byte必须是utf-8的字节流,
如果这样:
String aa = "中";
bb = aa.getBytes("ISO-8859-1");
new String(bb ,"UTF-8")肯定是乱码了
也就是说一个字符串以什么样的编码转换成字节流,就必须以什么样的编码进行还原
bb=aa.getBytes("UTF-8")就必须new String(bb,"UTF-8")否则乱码

言归正传:
url通过iso-8859-1传输,服务器收到这个字节流,默认会以ISO-8859-1来将这个字节流还原成相应的字符串,
就如同这样:
客户端:bb = aa.getBytes("UTF-8");
到了服务器:cc = new String(bb,"ISO-8859-1")还原字节流为节符串
(客户端的UTF-8到了服务器端自动变为ISO-8859-1了)
request.getParameter("");获取到这个cc,那么cc当然乱码了
所以就产生了这样的做法:new String(request.getParameter("").getBytes("ISO-8859-1"),"UTF-8")还原成原始字符串

将乱码字符串还原成原始的字节流,重新按UTF-8来编码.

至于在tomcat中更改URI-Encoding及使用过滤器,我估计是用来更改将字节流转成字符串的编码

这里只是本人的一点看法,有误请大家指正

解决方案

jsp页面中 用click事件调用js 此时的页面编码要用UTF-8 
<script language="javascript"> 
location.href=encodeURI(encodeURI("test.do?para=测试"); 
<script > 
在jsp页面中还可以用 
<a href="test.do?para=<%=java.net.URLEncoder.encode("测试","UTF-8")%>">测试</a> 

Servlet中用decode解码 
String para= request.getParameter("para"); 
para = java.net.URLDecoder.decode(strname , "UTF-8"); 

String para =new String(request.getParameter("para").getBytes("iso-8859-1"),"UTF-8");

分享到:
评论

相关推荐

    tomcat request.getParameter 乱码

    ### Tomcat中request.getParameter出现乱码的问题解析及解决方法 #### 一、问题背景与现象描述 在Java Web开发过程中,经常会遇到通过`HttpServletRequest`对象的`getParameter`方法获取前端表单提交的数据时出现...

    java request.getParameter中文乱码解决方法

    在 Java Web 开发中,request.getParameter() 获取 URL 中文参数乱码是非常常见的问题。今天,我们将分享几个解决中文乱码的方法,以便大家可以参考。 问题分析 在 Java 开发中,如果框架搭建的不完善或者初学者在...

    JSP用过滤器解决request getParameter中文乱码问题.docx

    总的来说,通过在过滤器中设置合适的字符编码,我们可以有效地解决JSP应用中请求参数中文乱码的问题。需要注意的是,选择哪种字符编码取决于你的应用需求,不同的编码可能会适用于不同的环境和用户群体。此外,如果...

    Request对象和乱码解决.doc

    在处理请求过程中,有时会遇到乱码问题,这主要是因为字符编码不一致导致的。以下是对Request对象和乱码解决的详细讲解。 1. Request对象的作用: Request对象提供了获取客户端发送的数据的方法,包括请求参数、...

    JSP 内置对象:request 对象.pptx

    1. void setCharacterEncoding(String encoding):设定编码格式,用来解决中文乱码问题(只针对 post 方式)。 2. String getRemoteAddr():获得客户端的 IP 地址。 3. String getContextPath():获得上下文路径,...

    JSP利用过滤器解决request中文乱码问题.docx

    JSP中requestgetParameter中文乱码问题是经常遇到的问题,解决这个问题有多种方法,但利用过滤器解决request中文乱码问题是其中最有效的一种方法。本文将详细介绍如何使用过滤器解决JSP中request中文乱码问题。 ...

    jsp实验项目实训实验三

    JSP 实验项目实训实验三 ...结论:通过本节实习实训课程,学生学会了 JSP 和 Web 网页的交互使用,以及在交互过程中编码问题的处理方法,并掌握了使用 request.getParameter 和 out.print 实现交互的方法。

    字符乱码de.pdf

    在Java的Web应用中,处理request对象中的中文参数是一个常见的挑战,尤其是在JSP中使用`request.getParameter()`时可能会出现乱码问题。这个问题的复杂性主要源于字符编码在多个环节的转换过程中可能出现不一致,...

    实例讲解JSP内置对象

    当request对象尝试获取包含汉字的参数时,由于字符编码问题可能会出现乱码。这是因为默认情况下,request对象假设数据是用ISO-8859-1编码的。要正确处理汉字,我们需要将获取的字符串先转换为ISO-8859-1编码的字节...

    Tomcat中Get和Post出现乱码的解决办法

    在 Tomcat 中,Get 和 Post 方法都可能出现乱码问题,这主要是由于编码问题引起的。在本文中,我们将详细介绍 Tomcat 中 Get 和 Post 方法出现乱码的解决办法。 一、乱码问题的出现 在 JSP 程序中,当我们使用 GET...

    jsp传值中文乱码问题解决方法示例介绍.docx

    这行代码应该在处理请求参数(如`request.getParameter()`)之前添加,确保请求的字符编码为UTF-8。注意,这只能处理POST请求,因为GET请求的参数已经由浏览器编码,此时设置请求编码无效。 示例代码: ```jsp ...

    中文乱码问题处理方法.docx

    中文乱码问题处理方法 在Web开发中,中文乱码问题是一个常见的问题,特别是在JSP页面、URL传递参数、表单提交、数据库连接等方面。为了解决这些问题,本文总结了几...通过使用正确的编码方式,可以解决中文乱码问题。

    润乾乱码问题

    3. 客户页面的编码是 GBK,例如String arg1 = new String(request.getParameter(“arg1”).getBytes(“GB2312”),”GBK”); 4. http 请求中,带参数修改应用服务器的配置文件,例如tomcat 的 server.xml 文件。 ...

    JSP中文乱码问题综述,中文乱码解决大全

    在JSP开发中,中文乱码是一个常见的问题,主要是由于编码不一致和处理不当导致的。Java语言和JSP文件基于Unicode,但保存和处理时可能会采用不同的编码,这就会引发乱码。本文将深入探讨JSP中文乱码的来源以及解决...

    jsp中文乱码问题jsp中文乱码问题详解

    在接受参数时进行编码转换,例如使用`String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8")`。 B. 在请求页面开始处执行请求的编码设置,例如使用`request.setCharacter...

    get方式传参中文乱码问题的解决方案

    GET请求中的参数是通过URL直接传递的,当参数包含中文字符时,如果URL编码不正确或者服务器端没有正确地解码这些参数,就会出现乱码问题。主要原因包括: 1. **客户端与服务器端编码不一致**:客户端发送请求时使用...

    软件工程答辩常见问题总结.pdf

    1. 在存入数据库时,进行编码转换,例如:String s=request.getParameter("author"); String author=new String(s.getBytes("ISO8859_1"),"gb2312"); 2. 在从数据库取出数据时,进行编码转换,例如:String s=rs....

    extjs 前后台交互参数出现中文乱码问题的解决方法

    ### extjs前后台交互参数出现中文乱码问题的解决方法 #### 问题背景与原因分析 在使用MyEclipse开发工具进行Web应用开发时,尤其是采用ExtJS框架结合Ajax技术进行前后端数据交互的过程中,可能会遇到一个常见的...

    jsp乱码解决方案 本方案解决了jsp常见的乱码问题

    - 对于特定场景下的乱码问题,可以通过转换字符串的编码来解决,例如示例代码中的处理方法: ```java byte[] temp; try { temp = newsclid1.getBytes("ISO-8859-1"); newsclid = new String(temp, "gb2312"); ...

    JSP编码以及乱码问题解疑

    **JSP编码与乱码问题详解** 在JSP(JavaServer Pages)开发中,编码问题是一个常见的困扰,尤其是在处理中文字符时。本文将深入探讨JSP编程过程中出现的乱码问题,包括原因分析和解决方案。 1. **基本的乱码问题**...

Global site tag (gtag.js) - Google Analytics