`
岁月如歌
  • 浏览: 107077 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

中文参数编码后传递依然乱码解决方法(java.net.URLEncoder.encode)

    博客分类:
  • java
阅读更多

使用java.net.URLEncoder.encode()可以对要传递的中文进行编码

a.在传参数之前先把参数进行转码:java.net.URLEncoder.encode(param);
取值时用语句java.net.URLDecoder.decode(param);再转回中文
b.在你的Tomcat目录-->conf目录-->server.xml里找出这段:
       <Connector
         port="8080"               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               debug="0" connectionTimeout="20000"
               disableUploadTimeout="true"
<!--在里边加上这个参数-->
URIEncoding="gb2312"
     />

简单示例程序如下:

<%@ page contentType="text/html;charset=gb2312" %>

<a href="ds.jsp?url=<%=java.net.URLEncoder.encode("编码的是这里","GB2312")%>">点击这里</a>


<%
//request.setCharacterEncoding("GBK");
if(request.getParameter("url")!=null)
{

str=request.getParameter("url");
str=java.net.URLDecoder.decode(str,"GB2312");
str=new String(str.getBytes("ISO-8859-1"));
out.print(str);
}

%>

JSP经过上面的处理之后,最后输出的HTML页面联结已经可以正常向服务器传递中文参数了。

下面我们阐述一下Servlet里怎么接收/解析中文参数。

对于<a href="/someServlet?key=%E4%BD%A0%E5%A5%BD">你好</a>之类的联结,我们可以用下面的servlet来解析传递过来的中文参数。


GetAsiaCharServlet.java

view plaincopy to clipboardprint?
import java.io.IOException;  
import java.net.URLEncoder;  

import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  

public class GetAsiaCharServlet extends HttpServlet {  
        
            
      @Override
      //redir?key=xxxx  
      protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {  
          String key = req.getParameter("key");  
            
          key = <SPAN style="COLOR: #ff0000">new String(key.getBytes("ISO-8859-1", "utf-8"))</SPAN>;  
            
      System.out.println(keyword);  
      //...  

      //重定向处理  
      //res.sendRedirect("http://www.google.com/search?q="+URLEncoder.encode(key , "utf-8"));  
      }  
}

import java.io.IOException;
import java.net.URLEncoder;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class GetAsiaCharServlet extends HttpServlet {
     
         
      @Override
      //redir?key=xxxx
      protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
          String key = req.getParameter("key");
         
          key = new String(key.getBytes("ISO-8859-1", "utf-8"));
         
      System.out.println(keyword);
      //...

      //重定向处理
      //res.sendRedirect("http://www.google.com/search?q="+URLEncoder.encode(key , "utf-8"));
      }
}

我们注意到使用req.getParameter("key")得到参数后,还使用了new String(key.getBytes("ISO-8859-1", "utf-8"))把ISO-8859-1字符集形式转换成UTF-8形式。
为什么呢?因为iso-8859-1是Java中网络传输使用的标准字符集,req.getParameter("key")得到的还是ISO-8859-1字符集,所以要转换一下才不会是乱码。

最后,顺便提一下,采用servlet重定向时,也需要对包含中文文字的参数做特殊处理。
例如,SERVLET从HTML页面的联结接受参数,然后重新定向到Google搜索。
则可以在上面的GetAsiaCharServlet里加上如下处理:
res.sendRedirect("http://www.google.com/search?q="+URLEncoder.encode(key , "utf-8"));

也就是说,需要把参数取出来,转换,再重新使用URLEncoder.encode编码,这样就不会出现乱码现象。

分享到:
评论

相关推荐

    url地址传参中文乱码处理

    在接收参数后,使用java.net.URLDecoder.decode("xxxx",“utf-8")将16进制字符转为中文。这种方式需要注意的是,在使用encode转码后,会出现特殊字符,这时候,就需要将特殊字符替换为相应的16进制。 在传参前转码...

    jsp地址栏传中文显示乱码解决方法分享.docx

    在发送端,对于需要通过URL传递的中文字符串,使用`java.net.URLEncoder.encode()`方法将其转换成适用于URL的标准格式,该方法默认采用的是UTF-8编码。 ```java String encodedName = java.net.URLEncoder.encode...

    教学视频--JSP中URL传递中文乱码问题的解决演示.rar

    2. **URL编码**:在传递中文参数前,使用Java的`java.net.URLEncoder.encode()`方法对中文参数进行编码,指定编码格式为UTF-8。例如:`URLEncoder.encode("中文参数", "UTF-8")`。 3. **URL解码**:在服务器端接收...

    Tomcat中文乱码解决方法参考.pdf

    方法 2:将发送的数据用 java.net 包中的 URLEncoder 类的 encode 方法进行 URL 编码 ```jsp 中国 ff"; aa=java.net.URLEncoder.encode(aa); // 用于 gbk 的网页编码 aa=java.net.URLEncoder.encode(aa,"utf-8"); /...

    解决页面传参中文乱码

    在Java中,可以通过使用`java.net.URLEncoder`类对中文参数进行编码,然后再传递到服务器端,从而避免乱码问题的发生。 1. **客户端编码处理**: 客户端在提交含有中文参数的请求前,可以先使用`URLEncoder.encode...

    JSP中文乱码问题解决方法小结

    为避免这个问题,需要在发送请求前使用`java.net.URLEncoder.encode()`对中文参数进行编码,例如`RearshRes.jsp?keywords=" + java.net.URLEncoder.encode(keywords, "UTF-8")`。在接收端,使用`new String(request....

    如何将编码转换为UTF-8

    2. 使用 URLEncoder.encode() 方法:在 Java 中,可以使用 java.net.URLEncoder.encode() 方法来对字符串进行编码,例如:response.sendRedirect( "err.jsp?msg= "+java.net.URLEncoder.encode( "乱码 "))。 3. ...

    %25E9%25AA%2597%25E5%25AD%2590原来是这样出来的

    在Java中,URL编码是通过`java.net.URLEncoder`类来完成的。这个类提供了`encode`方法,可以将字符串按照特定的字符集(默认为UTF-8)转换成适合URL的格式。URL编码的基本原理是将非ASCII字符转换为其对应的百分号...

    解决tomcat中文乱码问题

    2. **URL编码**:使用`java.net.URLEncoder.encode()`方法对中文字符串进行URL编码。 示例代码如下: ```java String aa = "中文测试"; aa = new String(aa.getBytes("UTF-8"), "ISO-8859-1"); response....

    java中文乱码

    在传参的 jsp 对中文进行编码可以使用 java.net.URLEncoder.encode 函数,在接受的 jsp 对中文进行转码可以使用 URLDecoder.decode 函数。 四、Java 与数据库之间的乱码 大部分数据库都支持以 unicode 编码方式,...

    在程序开发中的乱码问题解决办法

    - 当在HTML中传递含有中文的参数时,可以使用`URLEncoder.encode()`方法进行编码。 - 示例代码: ```html &lt;a href="servlet/AdminServlet?flag=&lt;%=java.net.URLEncoder.encode("中文", "UTF-8")%&gt;"&gt;点击 ``` ...

    jsp中页面间传汉字参数转码的方法.docx

    通常,我们可以使用`java.net.URLEncoder.encode()`方法来对字符串进行编码。这个方法会将字符串中的非字母数字字符转换为百分号(%)编码,例如将空格转换为"%20"。在示例中,为了应对中文字符,通常还需要指定编码...

    jsp页面间传中文参数示例(页面传参数编码).docx

    接收端接收到编码后的参数后,需要进行解码处理才能正确显示中文字符。可以使用`URLDecoder.decode()`方法来完成解码操作。 **示例代码:** ```java String decodedContent = java.net.URLDecoder.decode(request....

    java插入数据乱码解决集锦

    keywords=" + java.net.URLEncoder.encode(keywords, "UTF-8")`。 2. 在接收端解码参数,如`String keywords = new String(request.getParameter("keywords").getBytes("ISO-8859-1"), "UTF-8")`。 #### 三、...

    解决url中文乱码.doc

    在Java中,`java.net.URLEncoder.encode()`方法用于将字符串按照指定的字符编码进行URL编码。 2. **字符集编码**:在Web应用中,字符集编码是决定字符如何被存储和解析的关键因素。常见的字符集有GBK、ISO-8859-1和...

    jsp地址栏传中文显示乱码解决方法分享

    在编码时,使用`URLEncoder.encode()`指定正确的字符编码(如UTF-8),并在接收到参数后,先按照服务器默认编码(如ISO-8859-1)获取字节,然后用目标编码(如UTF-8)解码。这样可以确保中文字符在URL传递过程中不...

    jsp使用URL编码传递中文参数问题.doc

    Java中的`java.net.URLEncoder.encode()`方法用于将字符串按照UTF-8编码格式转换为适合URL的格式。在`a.jsp`中,我们看到`str_test`变量被编码并插入到URL中。 2. **字符编码问题**:在Web应用中,浏览器、服务器...

    中文乱码问题解决方法

    keywords=" + java.net.URLEncoder.encode(keywords) 然后在接收参数页面使用如下语句接收: keywords=new String(request.getParameter("keywords").getBytes("ISO-8859-1"),"UTF-8"); 解决方法二 修改 tomcat ...

    JSP中解决中文乱码的万能方法

    String encodedParam = java.net.URLEncoder.encode("中文", "UTF-8"); ``` 2. **POST请求** POST请求中的乱码问题相对较少,通常可以通过设置表单提交的编码格式来解决。例如,在HTML表单中指定`enctype`属性...

    解决jsp提交乱码的问题

    2. **使用URLEncoder.encode()方法**:在生成链接时,可以使用`URLEncoder.encode()`方法对参数值进行编码处理。例如: ```jsp &lt;%@ page language="java" import="java.net.*" pageEncoding="gb2312"%&gt; ...

Global site tag (gtag.js) - Google Analytics