request乱码问题(当我们提交的数据中含有中文信息时),分两种情况:

  • 通过post方式提交数据给Servlet

Servlet服务端部分代码:

public void doPost(httpServletRequest request, httpServletResponse response)

                         throws ServletException, IOException{

             //在获取用户表单信息之前把request的码表设置成UTF-8,

             //如果没这句的话,如果提交中文信息的时候,会乱码。

             request.setCharacterEncoding("UTF-8");             

             String value = request.getParameter("username"); //从request中获取客户端提交过来的信息

             System.out.println(value);

       }
  • 通过get方式提交数据给Servlet (要手动处理)

Servlet服务端部分代码:

 public void doGet(httpServletRequest request, httpServletResponse response)

                         throws ServletException, IOException{

             //从request中获取客户端提交过来的中文信息,获取到乱码  

             String value = request.getParameter("username"); 

             //拿到乱码反向查找 iso-8859-1 码表,获取原始数据,

             //在构造一个字符串让它去查找UTF-8 码表,已得到正常数据

             value1 = new String (value.getBytes("iso-8859-1"), "UTF-8") ; 

             System.out.println(value);          

                   }
  • 用超链接提交表单信息(通过 get 方式提交,需调用到doGet方法)
<a href="/Servlet/test?username=江西">登录<a/>

 总结:

   通过get提交表单信息有两种: 

     1.通过form表单的 method 设置 get方法提交(即method="get") 默认也是 get

       通过get方法提交到 Servlet程序中, 首先是得到表单的信息,但是乱码,

       然后还得手动去设置编码方式

       即 value1 = new String (value.getBytes("iso-8859-1"), "UTF-8")

     2.通过超链接提交

   通过post提交表单:

       在form表单的 method 设置 post方法提交(即method="post") ,

       通过post方法提交到 Servlet程序中,request 要在得到表单信息之前 设置编码方式

       即 request.setCharacterEncoding("UTF-8");

get: 通过get提交表单的信息,地址栏上可以看到,安全性不好

post:通过post提交表单的信息,地址栏上看不到表单的信息,

 

出现这种机制的原因:

      在于http协议上,通过get提交的信息加在url后面,所以能看到;

      通过post提交的信息是在请求体上的,也就是你敲了两次回车后,发送的信息,所以看不到

如果以上方法没有效果,可以尝试使用java.net.URLDecoder.decode(URIString, "UTF-8")方法:

encodeURI和decodeURI是成对来使用的,因为浏览器的地址栏有中文字符的话,可以会出现不可预期的错误,所以可以encodeURI把非英文字符转化为英文编码,decodeURI可以用来把字符还原回来。encodeURI方法不会对下列字符进行编码:":"、"/"、";" 和 "?",encodeURIComponent方法可以对这些字符进行编码。 
decodeURI()方法相当于java.net.URLDecoder.decode(URIString, "UTF-8"); 
encodeURI()方法相当于java.net.URLEncoder.encode(URIString, "UTF-8");

二、例子 

<script type="text/javascript">
var uriStr = "http://www.baidu.com?name=张三&num=001 zs";
var uriec = encodeURI(uriStr);
document.write("编码后的" + uriec);
var uridc = decodeURI(uriec);
document.write("解码后的" + uridc);
</script>

编码后的http://www.baidu.com?name=%E5%BC%A0%E4%B8%89&num=001%20zs 
解码后的http://www.baidu.com?name=张三&num=001 zs

java中解决request中文乱码问题的更多相关文章

  1. 解决Java中的HttpServletResponse中文乱码问题

    response.setHeader("Content-type", "textml;charset=UTF-8"); response.setCharacte ...

  2. 解决request中文乱码问题

    因为request请求都是ISO-8859-1,而jsp页面是采用UTF-8编码,所以当传递的参数有中文时,页面会出现乱码,但是可以将取到的数据通过String的构造函数使用指定的编码类型重新构造一个 ...

  3. [Java][Web]解决 Request 的乱码

    解决 get 提交的乱码 (手工处理) String username = request.getParameter("username"); username = new Str ...

  4. servlet中获取request中文乱码问题分析

    request.setCharacterEncoding("utf-8");//第一种情况 log.info("服务商名称:" + request.getPar ...

  5. java中post时中文乱码

    http://blog.chinaunix.net/uid-12348673-id-3335300.html 设置流的编码,就避免了乱码 public static String post(Strin ...

  6. request.getParameter()及解决数据库中文乱码问题——实习第七天

    今天老师让我们自己做一个小项目,我开始着手于实现这个小项目.途中遇到过几个小问题,在此做个小记录, 相信后期还是会借鉴的. 1,从前台传入数据给后台传入数据,并没有传入成功: 输出的为Null. 当然 ...

  7. Windows平台下在Emacs中使用plantuml中文乱码问题(已解决)

    Windows平台下在Emacs中使用plantuml中文乱码问题(已解决) */--> code {color: #FF0000} pre.src {background-color: #00 ...

  8. 解决Java保存到数据库中文乱码问题,加useUnicode=true&characterEncoding=UTF-8

    Java保存到数据库中文乱码, 解决方法如下: 我们在连接MySQL数据库的时候一般都会在url后面添加useUnicode=true&characterEncoding=UTF-8,但是问什 ...

  9. 解决URL中文乱码问题--对中文进行加密、解密处理

    解决URL中文乱码问题--对中文进行加密.解密处理 情景:在资源调度中,首先用户需要选择工作目标,然后跟据选择的工作目标不同而选择不同的账号和代理ip.处理过程如下:点击选择账号,在js中获取工作目标 ...

随机推荐

  1. Windows下让Git记住用户名密码(https)

    最近开始跟老板共同维护公司的框架代码,于是毫不犹豫地选择了Git这个驰名的版本控制系统(公司使用的是TFS,但外网访问老是断线). 选择的托管平台是OSChina,原因是其可以新建私有项目. 在拉取和 ...

  2. 【POJ】1330 Nearest Common Ancestors ——最近公共祖先(LCA)

    Nearest Common Ancestors Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 18136   Accept ...

  3. URAL 1796. Amusement Park (math)

    1796. Amusement Park Time limit: 1.0 second Memory limit: 64 MB On a sunny Sunday, a group of childr ...

  4. JavaScript 工作必知(九)function 说起 闭包问题

    大纲 Function Caller 返回函数调用者 Callee 调用自身 作用域 闭包 function 函数格式 function getPrototyNames(o,/*optional*/ ...

  5. KeystoneJS+mongo搭建简易博客

    KeystoneJS 是一款基于 Express 和 MongoDB 的开源免费 Node.js CMS 网站开发框架. 一. 安装node.js,mongodb 二. 命令行安装KeystoneJS ...

  6. C# Log4Net使用指南(转)

    1           简介 1.1          Log4net的优点: 几乎所有的大型应用都会有自己的用于跟踪调试的API.因为一旦程序被部署以后,就不太可能再利用专门的调试工具了.然而一个管 ...

  7. c++中的const参数,const变量,const指针,const对象,以及const成员函数

    const 是constant 的缩写,“恒定不变”的意思.被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性.所以很多C++程序设计书籍建议:“Use const whe ...

  8. prob5 of 140

    #include<stdio.h>int main(){ int n,i=1,j=1; double s=1,s1=0;; //scanf("%d",&n);  ...

  9. Java格式化输出

    Java的格式化输出等同于String.Format,与C有很大的相似,比如 System.out.printf("%8.2f", x);在printf中,可以使用多个参数,例如: ...

  10. 关于jQuery中toggle()函数的使用

    今天遇到一个有趣的例子,将它记录下来. 一个一级菜单,里边有一个二级菜单,二级菜单是通过锚点来链接页面元素的.想要实现的效果是当点击锚点时,页面链接到相应锚点,同时二级菜单隐藏,再点击一级菜单时,继续 ...