• web中常见乱码问题详解


    基本讲解

    1.UTF-8国际编码,GBK中文编码。GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立;

    2、web tomcat:默认是ISO8859-1,不支持中文的

    3.java.nio.charset.Charset.defaultCharset() 获得平台默认字符编码;

    4.getBytes() 是通过平台默认字符集进行编码;

    response乱码问题********************

    解决方法:

    添加:

    response.setCharacterEncoding("UTF-8");

    解决不了,后来又搜到一条解决方法是:

    response.setContentType("text/html;charset=utf-8");或者 response.setHeader("content-type","text/html;charset=UTF-8");告诉浏览器用utf-8解析。(setHeader是HttpServletResponse的方法。如果想在拦截器Filter中设置字符编码,则无此方法,因为Filter的doFilter方法的参数类型是ServletResponse)

    两句都填上,后来终于解决了这个问题;

    其实我们应该思考一下本质:

    response.setContentType("text/html;charset=UTF-8"); 目的是为了控制浏览器的行为,即控制浏览器用UTF-8进行解码;

    response.setCharacterEncoding("UTF-8");目的是用于response.getWriter()输出的字符流的乱码问题。如果是response.getOutputStream()是不需要此种解决方案的,因为这句话的意思是为了将response对象中的数据以UTF-8解码后的字节流发向浏览器;

    Servlet相关的几种乱码******************

    1、浏览器调用jsp,html等页面中文显示乱码

    此情况需满足两个要求:

    (1)文件本身是以utf-8编辑保存的(myEclipse中在properties中鼠标右键选择utf-8)

    (2)浏览器用utf-8解析:

    (手动)==> 在浏览器中右键选择编码格式为utf-8

    (智能)==> 在文件中写入如: <meta name="content-type" content="text/html; charset=UTF-8">  通过<meta>标签模拟response头,起到告诉浏览器用utf-8的编码解析

    (智能)==> response.setContentType("text/html;charset=UTF-8");起到告诉浏览器用utf-8的编码解析

    常用:

    <meta name="content-type" content="text/html; charset=UTF-8">或<meta charset="utf-8">

    <%@ pageEncoding="utf-8"%>

    <?xml encoding="UTF-8"?>

    request乱码问题*******************

    request请求分为post和get,对于不同的请求方式有不同的解决乱码的方案;
    ==>POST请求:

    ==>GET请求(URI方式传递参数乱码):

    出现情况:浏览器访问<a href=""><form method="get">

    如:<a href="/webproject/display.jsp?username=张三&password=123">显示用户名和密码</a>

    解决方法:问题本质是get方式传递的参数内容默认编码方式问ISO8859-1,而且使用request.setCharacterEncoding("utf-8")也无法解决问题。

    法一:要解决这个问题,修改tomcat服务器的配置文件。修改tomcat目录下的conf/server.xml文件的第43行:

    修改前内容:

    <Connector port="8080" protocol="HTTP/1.1"

         maxThreads="150"   connectionTimeout="200000"

         redirecPort="8443"/>

    修改后内容:

    <Connector port="8080" protocol="HTTP/1.1"

         maxThreads="150"   connectionTimeout="200000"

         redirecPort="8443"    URIEncoding="utf-8"/>

    法二:String usernameString = new String(username.getBytes("ISO-8859-1"),"UTF-8"); 

    JSP相关乱码解决觉案**************************

    问题描述:通过jsp,html,或servlet中的表单元素把参数提交给对应的jsp或者servlet时,在接收的jsp或servlet中接收到的参数中文显示乱码。

    例如:

    提交jsp代码如下:

    <%@ page language="java" pageEncoding="utf-8"%>

    <html>

    <head>

    <title>输入表单</title>

    </head>

    <body>

    <form id="inputForm" name="inputForm" method="post" action="display.jsp">

          用户名:<input type="text" name="username"/><br/>

          密   码  :<input type="password" name="password"/><br/>

         <input type="submit" name="submit" value="提交"/>

    </form>

    </body>

    </html>

    接收参数的jsp代码如下:

    <% @  page language="java" pageEncoding="utf-8"%>

    <html>

    <head>

    <tilte>接收表单</title>

    </head>

    <body>

         <% 在这里插入

               request.setCharacterEncoding("utf-8");

          %>

           用户名:<%=request.getParameter("username")%><br/>

          密     码:<%=request.getParameter("password")%><br/>

    </body>

    </html>

    解决方法:在接收post提交的参数前,使用request.setCharacterEncoding("utf-8")设定接收参数的内容格式为utf-8编码。见接收表单中的插入内容即可。当然这种乱码问题最好使用中文过滤器的方法最好。

    web引入js文件出现乱码的解决方式:******************

    在web开发中我们一般都会不可避免的使用js。我们可以将js代码直接放在页面中即通过内部使用js。但是为了给页面良好的"瘦身"我们一般都会将js代码放在外部,然后通过src引用。这个时候我们就需要注意一个问题:编码问题。如果web页面也js采用不同编码,这个时候就会出现乱码。(内部使用js不需要注意编码问题,因为他们采用的是同一种编码) 

    解决方式1:

    <script type=”text/javascript” src=”test.js” charset=”utf-8″></script> 

    解决方式2:

    <script type=”text/javascript” src=”test.js” charset=”gb2312″></script> 

  • 相关阅读:
    php的rabbitmq扩展(未测试)
    rabbitmq安装
    windows操作系统安装jdk以及配置环境变量
    chrome设置user-agent
    pycharm中快捷键ctrl+c,ctrl+v,ctrl+f失效问题解决
    chrome设置user agent
    Pycharm鼠标滚动控制字体大小
    mouse事件实现可拖拽的div
    DOM事件委托
    !heap 手动查询内存泄漏
  • 原文地址:https://www.cnblogs.com/xiaobaizhang/p/8016691.html
Copyright © 2020-2023  润新知