GET&POST方式解决中文乱码问题

在学习的过程中,实时总结觉得是非常重要的,即使是再简单的问题,当你积累的多了,不要总是犯一些简单的错误,实时总结,你会发现进步就一天天成长起来了。

中文乱码有几方面,页面展示,request和response过程中,Web服务器编码的问题。

1,如果编写中文的页面,首先将Tomcat的server.xml中的配置加上

<Service>

<Connector URIEncoding="UTF-8">

...

</Connector>

</Service>

2,GET方式的请求与接收过程

页面中参数“param=中文”的编码原本为GBK,当用GET方式发送参数的时候,参数值会被Web服务器从GBK转码为ISO-8859-1。

Servlet接收到的GET请求参数的编码当然为ISO-8859-1了,对于中文肯定显示不了,因此要将ISO-8859-1转换为GBK就可以正常显示中文了。

String param = request.getParameter("param");

String x = new String(param.getBytes("ISO-8859-1"),
"GBK");

System.out.println("GET方式获取的中文参数值:" + x);

3,POST方式请求与接收过程

页面中参数“param=中文”的编码原本为GBK,当点击页面中提交按钮后,参数会以GBK编码格式发送给Servlet,因此Servlet接收参数的时候必须将请求的编码明确设定为GBK,这样才能正确接收中文。

request.setCharacterEncoding("GBK");

String param = request.getParameter("param");

System.out.println("POST方式获取的中文参数值:" + param);

4,过滤器方式,设置request和response的CharacterEndoding("GBK),但是对于GET方式无法通过filter实现,必须读取的时候转编码

Java代码

  1. 在doPost()方法中使用过滤器(所有编码方式为过滤器中设置的编码方式),在doget()方法中使用iso-8859方法
  2. doGet及在页面中处理乱码的方法
  3. 1.EncodString.java 处理乱码的类
  4. package commons;
  5. import java.io.UnsupportedEncodingException;
  6. public class EncodString {
  7. public static String trans(String in) {
  8. try {
  9. in = new String(in.getBytes("ISO-8859-1"), "GBK");
  10. } catch (UnsupportedEncodingException e) {
  11. // TODO Auto-generated catch block
  12. e.printStackTrace();
  13. }
  14. return in;
  15. }
  16. }
  17. 2.在页面或doGet()方法中进行转换
  18. String n=request.getParameter("name");
  19. String name=EncodString.trans(n);
  20. doPost()方法中处理乱码的方法
  21. 1.过滤器EncodeFilter.java
  22. package com.xuyue.exp.filter;
  23. import java.io.IOException;
  24. import javax.servlet.Filter;
  25. import javax.servlet.FilterChain;
  26. import javax.servlet.FilterConfig;
  27. import javax.servlet.ServletException;
  28. import javax.servlet.ServletRequest;
  29. import javax.servlet.ServletResponse;
  30. public class EncodeFilter implements Filter {
  31. private String encoding="";
  32. public void destroy() {
  33. // TODO Auto-generated method stub
  34. }
  35. public void doFilter(ServletRequest request, ServletResponse response,
  36. FilterChain chain) throws IOException, ServletException {
  37. // TODO Auto-generated method stub
  38. request.setCharacterEncoding(encoding);
  39. chain.doFilter(request, response);
  40. }
  41. public void init(FilterConfig config) throws ServletException {
  42. // TODO Auto-generated method stub
  43. encoding=config.getInitParameter("encoding");
  44. }
  45. }
  46. 2.在web.xml中配置过滤器
  47. <filter>
  48. <filter-name>encoding</filter-name>
  49. <filter-class>com.xuyue.exp.filter.EncodeFilter</filter-class>
  50. <init-param>
  51. <param-name>encoding</param-name>
  52. <param-value>GBK</param-value>
  53. </init-param>
  54. </filter>
  55. <filter-mapping>
  56. <filter-name>encoding</filter-name>
  57. <url-pattern>/*</url-pattern>
  58. </filter-mapping>
  59. 3.项目中所有的编码方式改为GBK
时间: 2024-08-29 11:13:33

GET&POST方式解决中文乱码问题的相关文章

HttpServletRequest解决中文乱码的问题

HTTP请求有get和post,这两中方式解决中文乱码的方式如下: 1.Post方式请求 //这句话是设置post请求体的编码为utf-8 request.setCharacterEncoding("utf-8");//获取请求参数 request.getParameter("username"); 2.Get方式请求 new String(request.getParameter("username").getBytes("ISO-8

【原创】通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 ‘incorrect string value: &#39;\xF0...

这篇blog重点在解决问题,如果你对字符编码并不是特别了解,建议先看看 < [原创]通俗易懂地解决中文乱码问题(1) --- 跨平台乱码 >. 当然,如果只是针对解决这个Mysql插入报错问题,本篇足够了. 一.定位错误 定位错误绝对是至关重要的一环.我建议遇到问题耐心分析一下比较好,毕竟“不是所有的牛奶都叫特仑苏”. 引起同一个问题的可能有很多,别人的解决方案也许并不适合自己. 那先看看问题出现在哪了,报错如下: 发现的确是编码错误, 16进制的错误提示(\xF0\x9F\x94\xA5\x

javaEE:day2-servlet生命周期、提交解决中文乱码、tomcat加载jar包或类文件的顺序

servlet生命周期 生命周期简介: servlet在服务器第一次被请求的时候new出来,并初始化(即init())再调用service方法.这个实在服务器中new出来,然后用HashMap加的,与客户端无关.客户端之后访问只调用这个servlet的service方法. 具体分为4步: 1 构造方法 :服务器在被客户端第一次请求的时候运行 仅在服务器中运行一次 2 init方法:客户端第一次访问服务器的时候在服务器中进行初始化 仅一次.并且可以通过config参数在 web.xml中通过(ke

SSH项目web.xml文件的常用配置【struts2的过滤器、spring监听器、解决Hibernate延迟加载问题的过滤器、解决中文乱码的过滤器】

配置web.xml(struts2的过滤器.spring监听器.解决Hibernate延迟加载问题的过滤器.解决中文乱码的过滤器) <!-- 解决中文乱码问题 --> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-c

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

原文:[原创]通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 'incorrect string value: '\xF0... 这篇blog重点在解决问题,如果你对字符编码并不是特别了解,建议先看看 < [原创]通俗易懂地解决中文乱码问题(1) --- 跨平台乱码 >. 当然,如果只是针对解决这个Mysql插入报错问题,本篇足够了. 一.定位错误 定位错误绝对是至关重要的一环.我建议遇到问题耐心分析一下比较好,毕竟“不是所有的牛奶都叫特仑苏”. 引起同一个问

通俗易懂地解决中文乱码问题(1) --- 跨平台乱码

原文:[原创]通俗易懂地解决中文乱码问题(1) --- 跨平台乱码 本来是只打算写一篇关于中文乱码的blog的,但是发现要讲的东西跨度有点大,不好写到同一篇里面,所以分开了. 另一篇是  <[原创]通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 ‘incorrect string value: '\xF0...> . 这一篇重点在编码的理论,另一篇重点在解决问题及思路. 一.问题的开始 中文乱码问题经常出现在实际工程中,尤其容易发生在经验不足的团队对问题预估不

一步一步学习androidNDK编程(log调试和解决中文乱码)

上一篇说到了androidNDK编程的helloworld,今天,学习了如何在ndk开发时候,在c代码当中,向java代码那样,打印出log 1. 我们需要引入头文件: #include <android/log.h> 2.定义打印的tag,这里相当于java中的static final类型 #define LOG_TAG "onEvent" 3.定义宏,相当于声明一个方法: #define LOGD(fmt, args...) __android_log_print(AN

request 解决中文乱码问题

package request; import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse; public class RequestDemo4 extends Http

Web---演示servlet技术(servlet生命周期),解决中文乱码问题

本节讲解决中文乱码问题的4种方法. 还有更好的方法,也就是用过滤器,这里就不演示了,博主目前也不会~呼?(^?^*)~过段时间才会学. servlet生命周期演示: index.jsp: <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Tra