zoukankan      html  css  js  c++  java
  • 十五、web中处理乱码问题总结

    一、jsp变成之道---中文乱码

    jsp在转换为Servlet的过程经过三次编码转化:

    转自  http://www.cnblogs.com/chenssy/p/4235191.html

    二、java Web项目中解决中文乱码问题总结:

    转自 http://www.cnblogs.com/chenssy/p/4235191.html

    三、编写过滤器处理乱码:

    表单提交数据、ajax请求的乱码问题总结:转自 http://www.cnblogs.com/liuling/archive/2013/03/31/encoding.html

    编写过滤器处理乱码问题总结:转自 http://www.cnblogs.com/liuling/archive/2012/12/17/asdfsdfa.html

    四、自我理解总结:

    1、javaWeb中有哪些地方有转码?
    1)浏览器:   
     -->发送一个Http请求,经过编码的地方有url、cookie、parameter
    2)服务器:    
     -->接受HTTP请求,解析HTTP请求,对url、cookie、parameter进行解码
     -->服务器进行业务逻辑处理过程中可能需要读取数据库、本地文件或者网络中的其他文件等,这些过程都需要进行编码解码
     -->处理完后,服务器将数据进行编码后发送给客户端
    3)浏览器 
     -->浏览器经过解码后显示给用户,这个整个过程中涉及的编码解码的地方较多.且服务器与客户端进行交互的过程最容易出现乱码
    备注:
    简单理解为:页面编码数据传递给服务器,服务器对获得的数据进行解码操作,经过一番业务逻辑处理后将最终结果编码处理后传递给客户端,
    客户端解码展示给用户。


    2、客户端向服务器发送请求无非就通过四中情况:
    1)URL方式直接访问
    http://localhost:8080/jsp-02/updateStudent.jsp?sid=5&sname=张六&sadress=北京门头沟&slikes=看书-上网-旅游
    http     协议
    localhost  主机
    8080    端口
    jsp-02    context Path
    updateStudent.jsp servlet Path
    sid=5&sname=张六&sadress=北京门头沟&slikes=看书-上网-旅游   为参数
    备注:由于各大浏览器、各个操作系统对URL的URI、QueryString编码都可能存在不同,这样对服务器的解码势必会造成很大的困扰,tomcat是如何对URL进行解码操作的:对URI的解码操作是首先获取Connector的解码集,该配置在server.xml中<Connector URIEncoding="utf-8"  />如果没有定义则会采用默认编码ISO-8859-1来解析

    2)页面链接
    3)表单get提交
     通过URL方式提交数据是很容易产生乱码问题的,所以通常采用表单形式提交数据。当用户点击submit提交表单时,浏览器会根据设定的编码来编码数据传递给服务器。通过GET方式提交的数据都是拼接在URL后面(可以当做query String??)来提交的,所以tomcat服务器在进行解码过程中URIEncoding就起到作用了。tomcat服务器会根据设置的URIEncoding来进行解码,如果没有设置则会使用默认的ISO-8859-1来解码。假如我们在页面将编码设置为UTF-8,而URIEncoding设置的不是或者没有设置,那么服务器进行解码时就会产生乱码。这个时候我们一般可以通过new String(request.getParameter("name").getBytes("iso-8859-1"),"utf-8") 的形式来获取正确数据。

    备注:如果是post提交,则与tomcat的编码是没有关系的,此时修改tomcat的server.xml的编码方式是不可行的。只有get提交,才可与tomcat的编码有关

    4)表单post提交
      对于POST方式,它采用的编码也是由页面来决定的即contentType。当我通过点击页面的submit按钮来提交表单时,浏览器首先会根据contentType的charset编码格式来对POST表单的参数进行编码然后提交给服务器,在服务器端同样也是用contentType中设置的字符集来进行解码(这里与get方式就不同了),这就是通过POST表单提交的参数一般而言都不会出现乱码问题。当然这个字符集编码我们是可以自己设定的:request.setCharacterEncoding(charset) 。

     
    3.1jsp页面的声明
    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <%
     <!-- pageEncoding是jsp文件本身的编码,
     浏览器首先会根据contentType的charset编码格式来对POST表单的参数进行编码然后提交给服务器
     在服务器端同样也是用contentType中设置的字符集来进行解码
     以tomcat为列服务器对对URL进行解码操作的是在server.xml中<Connector URIEncoding="utf-8"/>进行配置的。
     如果没有定义则会采用默认编码ISO-8859-1来解析
     -->

    3.2Java中处理

    reqVO.setCaoi(new String (reqVO.getCaoi().getBytes("iso8859-1"),"UTF-8"));

     4.1页面中的href路径

    window.location.href="genQueryAction.do?action=outputExclInfo&pattern="+encodeURI(encodeURI(pattern))+"&name="+encodeURI(encodeURI(name))”;

    4.2java中处理
    String pattern = java.net.URLDecoder.decode(request.getParameter("pattern")==null?"":request.getParameter("pattern"), "utf-8");
    String name = java.net.URLDecoder.decode(request.getParameter("name")==null?"":request.getParameter("name"), "utf-8");

    细水长流,打磨濡染,渐趋极致,才是一个人最好的状态。
  • 相关阅读:
    Bit Manipulation
    218. The Skyline Problem
    Template : Two Pointers & Hash -> String process
    239. Sliding Window Maximum
    159. Longest Substring with At Most Two Distinct Characters
    3. Longest Substring Without Repeating Characters
    137. Single Number II
    142. Linked List Cycle II
    41. First Missing Positive
    260. Single Number III
  • 原文地址:https://www.cnblogs.com/jiarui-zjb/p/6412812.html
Copyright © 2011-2022 走看看