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");

    细水长流,打磨濡染,渐趋极致,才是一个人最好的状态。
  • 相关阅读:
    opencv获取网络相机的图像-不用sdk
    openpose开发(1)官方1.5版本源码编译
    Anaconda3(5-1)程序编辑器 自带的spyder
    Anaconda3(5-2)程序编辑器 win10下PyCharm安装及配置Pytorch流程
    Anaconda3(4)安装pytorch
    (0)资料收集
    mock以及特殊场景下对mock数据的处理
    shell编程中的控制判断语句
    shell相关知识点
    React (native) 相关知识
  • 原文地址:https://www.cnblogs.com/jiarui-zjb/p/6412812.html
Copyright © 2011-2022 走看看