zoukankan      html  css  js  c++  java
  • 乱码问题锦记

    问题1:关response设置中文的乱码问题

    原因:response缓冲区的默认编码是iso8859-1,此码表中没有中文

    解决方法response.setContentType("text/html;charset=UTF-8");

    问题2:关于页面提交请求参数(request)出现的中文乱码的问题

    解决方法

        way1:    

          如果表单是用get提交方式,则需要在servlet中添加如下语句:

          request.setCharacterEncoding("UTF-8");

         如果表单使用post方式提交,则需要在servlet中添加如下语句:
         eg:以username为例:

            String username = request.getParameter("username");//此时username为乱码状态

            username = new String(username.getBytes("ISo-8859-1"),"UTF-8"); //此时username正常显示中文了

         原理

            

        way2:通过filter进行request.getParameter(name);的方法增强

           核心代码如下图所示:

          way3:通过代理对象将方法进行强化 

      public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {
        final HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse resp = (HttpServletResponse) response;
        /**
        * 使用动态代理完成乱码问题
        */
        HttpServletRequest proxyInstance = (HttpServletRequest) Proxy.newProxyInstance(
          req.getClass().getClassLoader(),
          req.getClass().getInterface(),
          new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args)
              throws Throwable {
              if("getParameter".equals(method.getName())){
                String invoke = (String) method.invoke(req, args);//乱码
                invoke = new String(invoke.getBytes("ISO-8859-1"), "UTF-8");
                return invoke;
              }    
              return method.invoke(req, args);
            }
          });
          chain.doFilter(proxyInstance, resp);
         }

      

    问题3:cookie不能保存中文。那么如何将cookie中的中文进行保存?

    解决方法在将中文字符username保存到cookie中,首先将username进行编码,URLEncoder.encode(username, "UTF-8");此时得到的是一串字符串,记为cookie_username,保存到cookie中。然后,我们从cookie中取到cookie_name这串乱码,对它进行解析,URLDecoder.decode(cookie_name, "UTF-8");此时得到的就是一串中文字符。

    问题4:     

  • 相关阅读:
    算法训练 P1103
    算法训练 表达式计算
    算法训练 表达式计算
    基础练习 时间转换
    基础练习 字符串对比
    Codeforces 527D Clique Problem
    Codeforces 527C Glass Carving
    Codeforces 527B Error Correct System
    Codeforces 527A Glass Carving
    Topcoder SRM 655 DIV1 250 CountryGroupHard
  • 原文地址:https://www.cnblogs.com/empcl1314/p/6947698.html
Copyright © 2011-2022 走看看