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

使用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编码,这样就不会出现乱码现象。

解决中文乱码的文章,抄的相关推荐

  1. PHPWord生成word 下载 解决中文乱码

    文章分两部分:一是代码部分,第二是解决中文乱码. 使用PHPWord生成Word文档 下载或保存到服务器 /*生成word文档*/public function makePhpWord(){vendo ...

  2. java web 中有效解决中文乱码问题-pageEncoding与charset区别, response和request的setCharacterEncoding 区别

    java web 中有效解决中文乱码问题-pageEncoding与charset区别, response和request的setCharacterEncoding 区别 参考文章: (1)java ...

  3. js获取url地址栏参数的方法,解决中文乱码问题,能支持中文参数

    js获取url地址栏参数的方法,解决中文乱码问题,能支持中文参数 参考文章: (1)js获取url地址栏参数的方法,解决中文乱码问题,能支持中文参数 (2)https://www.cnblogs.co ...

  4. [转]QT中QString与string的转化,解决中文乱码问题

    [转]QT中QString与string的转化,解决中文乱码问题 参考文章: (1)[转]QT中QString与string的转化,解决中文乱码问题 (2)https://www.cnblogs.co ...

  5. php如何解决中文乱码问题?

    php如何解决中文乱码问题? 参考文章: (1)php如何解决中文乱码问题? (2)https://www.cnblogs.com/wszz/p/7978610.html (3)https://www ...

  6. 通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 ‘incorrect string value: '\xF0......

    原文:[原创]通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 'incorrect string value: '\xF0... 这篇blog重点在解决问题,如果你对 ...

  7. JAVA之NIO按行读写大文件,完美解决中文乱码问题

    JAVA之NIO按行读写大文件,完美解决中文乱码问题 参考文章: (1)JAVA之NIO按行读写大文件,完美解决中文乱码问题 (2)https://www.cnblogs.com/jpfss/p/89 ...

  8. 【原创】通俗易懂地解决中文乱码问题(1) --- 跨平台乱码

    [原创]通俗易懂地解决中文乱码问题(1) --- 跨平台乱码 参考文章: (1)[原创]通俗易懂地解决中文乱码问题(1) --- 跨平台乱码 (2)https://www.cnblogs.com/xi ...

  9. java读取.properties文件及解决中文乱码问题

    java读取.properties文件及解决中文乱码问题 参考文章: (1)java读取.properties文件及解决中文乱码问题 (2)https://www.cnblogs.com/helloq ...

最新文章

  1. syslog打印不带等级_printk的日志级别和控制台级别
  2. iOS项目的本地化处理(多国语言)
  3. 沉浸式小说App获得200万美元投资
  4. 02.uri-search
  5. c# 获取当前活动窗口句柄,获取窗口大小及位置
  6. linux内核源码 -- list链表
  7. hive explode函数入门及其与lateral view的结合
  8. oracle 查询default,oracle分区表检查--是否带有max或default分区
  9. Kindle刷安卓双系统的方法
  10. 2022高压电工操作证考试题库及模拟考试
  11. 软考计算机硬件知识,软考程序员考点计算机硬件基础知识之指令系统
  12. PTAM的笔记(二)---ptam移植到android平台
  13. 《德鲁克管理思想精要》读书笔记11 - 管理你的下半生
  14. 3月股权激励团队管理内容回顾
  15. 什么是全屋定制家居概念?
  16. “App开发者需要更新此App以在此iOS版本上正常工作 ” 解决方法
  17. echarts饼图默认中间显示总数
  18. PADS9.5—layout中导入.asc文件时遇到的问题
  19. 1024 程序员节,带你走进程序员的世界——
  20. 服务交付服务规范十要素

热门文章

  1. length()和strlen()
  2. 华硕主板P5QL Pro Bios支持771 L5420/E5420
  3. 职业规划中五个WHAT认清自己
  4. 默认构造函数,=default,=delete
  5. 微信支付----PC扫码支付(查询微信支付订单判断是否支付成功)
  6. Python:从0到1销售预测建模
  7. Cadence Allegro 导出SMT钢网坐标BOM焊接文件图文教程及视频演示
  8. 你应该知道的Tor的七件事
  9. mplayer播放器
  10. 云存储哪家强:AWS、Azure、 Google、SoftLayer的对象存储和块存储