zoukankan      html  css  js  c++  java
  • servlet的xx方式传值中文乱码

        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //POST提交解决乱码的方式   与GET方式不同的是请求new String(nameParam.getBytes("iso8859-1"), "UTF-8");   响应是相同的
            req.setCharacterEncoding("UTF-8");
            resp.setContentType("text/html;charset=UTF-8");
    
            String nameParam = req.getParameter("name");//很奇怪  form表单获取的数据 乱码
            //一般情况下,服务器默认的编码是“iso8859-1”,所以我们需要数据还原,然后再转换成UTF-8的形式
            //不允许我去转呀  报错---解决:修改tomcat的server.xml文件  添加  URIEncoding="UTF-8" useBodyEncodingForURI="true"  哈哈 完美解决 好累
            //nameParam = new String(nameParam.getBytes("iso8859-1"), "UTF-8");
    
            System.out.println("找到了:"+ nameParam);//第一次进来null  输入店员姓名 点击查询 输出???é??

    具体三种方式解决:------------第三种完美解决 也正是大家不太熟悉的方法   不知看到此文后你的问题有没有解决哪?

    方法一: get方式提交的参数编码,只支持iso8859-1编码。因此,如果里面有中文。在后台就需要转换编码,如下 
          String bname = request.getParameter("bname"); 
          bname = new String(bname .getBytes("iso8859-1"),"utf-8"); 
          前提是你页面编码就是utf-8,如果是gbk,那上面那句代码后面就改成gbk。 
          But修改后我的问题仍没解决,继续。。。
    
    方法二:在客户端使用 URLEncoder.encode(“中文”,”UTF-8”)对中文参数进行编码,在服务器端需要进行解码this.setName(java.net.URLDecoder.decode(name, “UTF-8”)); 
    比较麻烦!
    
    方法三:修改tomcat的server.xml文件: 
    
           <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" />
    
        在其中添加URIEncoding="UTF-8" useBodyEncodingForURI="true"这一句。我使用的tomcat8,之前没有添加useBodyEncodingForURI="true",所以还是乱码,添加后问题解决!

    当然 每次Servlet中总会有各种各样的中文请求,为了避免在每个Servlet种都添加request.setCharacterEncoding(“utf-8”)或者response.setCharacterEncoding(“utf-8”),为此可以考虑添加一个中文过滤器  具体代码如下:

    1.web.xml

        <filter>
            <filter-name>CharsetEncodingFilter</filter-name>
            <filter-class>com.pers.hoobey.filter.CharsetEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <!-- 指定字符编码为UTF-8 -->
                <param-value>UTF-8</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>CharsetEncodingFilter</filter-name>
            <!-- 过滤所有的jsp页面的请求 -->
            <url-pattern>*.jsp</url-pattern>
        </filter-mapping>

    2.CharsetEncodingFilter

    //采用filter统一处理字符集
    public class CharsetEncodingFilter implements Filter {
        private String encodeString;
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            // 从init-param中获取param-name为encoding参数的值
            encodeString = filterConfig.getInitParameter("encoding");
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            System.out.println("begin");
            // 设置字符集
            request.setCharacterEncoding(encodeString);
            // 继续向下执行,如果还有其他filter继续调用其他filter,没有的话将消息发送给服务器或客户端
            chain.doFilter(request, response);
            System.out.println("end");
        }
    
        @Override
        public void destroy() {
        }
    }
  • 相关阅读:
    Java String截取判断文件类型
    HttpServletRequest request 转 Json
    httprunner3.x详细教程七(三种方式实现参数化数据驱动)
    httprunner3.x详细教程六(httprunner的setup和teardown及hook)
    httprunner3.x详细教程五(debugtalk.py介绍)
    httprunner3.x详细教程四(.env文件介绍)
    httprunner3.x详细教程三(httprunner中testcase的构造)
    httprunner3.x详细教程二(har文件录制及har文件转换)
    httprunner3.x详细教程一(框架结构介绍及搭建)
    mybatis.xml和mapper.xml文件的基本配置
  • 原文地址:https://www.cnblogs.com/hoobey/p/8036283.html
Copyright © 2011-2022 走看看