• 乱码问题锦记


    问题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:     

  • 相关阅读:
    Visual C++ 11 中新的并发功能
    Windows Azure Achievements for Visual Studio 发布
    视频:Pariveda解决方案帮助客户使用Windows Azure拓展商机
    ISV博客系列:本帖出自Fielding系统的创始人兼首席执行官
    2012新版微软一站式示例代码浏览器正式发布 包含Windows Azure代码示例!
    现实世界的Windows Azure:采访Soluto的创始人Tomer Dvir
    Hello China操作系统运行截图(完整版)
    ISV客户博客系列:Persistent Systems 使用Windows Azure交付基于Java的CloudNinja项目
    行业操作系统示例汽车操作系统
    上海的主要商务区域
  • 原文地址:https://www.cnblogs.com/empcl1314/p/6947698.html
Copyright © 2020-2023  润新知