`
_Jason_
  • 浏览: 42858 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Jsp 中文乱码原因及处理

阅读更多

          

Java Web Project 中一定会用到Jsp文件,而乱码问题又是做项目中必须要小心的,因此Jsp乱码问题我们应不让其出现,如果出现了也应有办法来解决,下面是我整理的几类Jsp乱码问题,希望对各位同行有帮助,如果有不准确的地方还请大神指教留言。

 

1.       页面显示乱码

 

  <% out.print(“中文”)%>

原因:<%@ page language="java" import="java.util.*"%>中没有设置页面的编码格式:

        pageEncoding="GBK" 或是 pageEncoding="UTF-8"

     (  常用编码集

                  UTF-8: 国际通用编码,包括世界各国语言字符.

                  GBK:  我国自己的编码集,汉字简体,繁体都支持.

                  GB2312: 也是我国的编码集,但是不支持繁体,导致了GBK的出现.

                  ISO-8859-1: 收录ASCII字符,西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应

                   的文字符号,无欧元符号,不支持中文,所以做项目时一定要修改Jsp

                                      编码,还有工程编码,这个如果大意了,那么结果可能很悲剧,切 

                   记!!!本人一般都是使用UTF-8,我想大家应该都差不多吧~)

处理方法:将文件page指令中加入编码设置

          <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

 

2.       URL传值乱码

 

jsp中用<a>提交到本页面一个值,再在该页面中显示,在地址栏中就能看到乱码了

<%

<a href="xxx.jsp?param='中文'">提交一个值</a>

<% String param=request.getParament("param")

                      out.print(param);//在页面显示为乱码

%>

原因:服务器不能识别中文。

处理方法: 如果你用的是tomacat那么就要添加一下它的conf文件夹下的server.xml文件中<Connector>标签中的属性 <URLEncoding="UTF-8"> 或是其他支持中文的编码。

 

3.       form提交乱码

 

原因:tomcat中对于post方式提交采用的默认编码是ISO-8859-1,不识别中文

 

处理方法:

 

.对提交后的request得到的值进行再编码设置,如:

<%

                   String username=request.getParameter("username");

                   String user=new String(username.getBytes("ISO-8859-1"),"UTF-8");

                 out.print(user);

%>

username按照原来默认的编码(ISO-8859-1)打乱,然后再用UTF-8进行重组。

该方法是有缺点的:

1.当提交的数据很多的时候,要对每个值进行处理,这是很费时费力的活,不划算。

2.如果不是原来的默认编码ISO-8859-1了,那么这种处理就没有用了,转换不到正确

  的汉字。

所以基于以上几点,方法二更好

 

 .过滤器filter

       既然表单的数据以post提交后都是封装在request对象中的,那么我们就在这里设置一个过滤器,是所有request对象中的数据都进行一遍重编码,实现把所有表单数据都处理,很是省事!强烈推荐。

 

下面是filter具体实现

 

-------------------------------------------------------------JSP文件---------------------------------------------------------

<body>

                 <form action="MyJsp.jsp" method="post">

                            username: <input type="text" name="username"/>

                                              <input type="submit" name="submit" value="submit">

                   </form>

                   <%

                   String username=request.getParameter("username");

                   ///String user=new String(username.getBytes("ISO-8859-1"),"UTF-8");这个方式有缺陷

                 out.print(username);

                   %>

  </body>

 

 

----------------------------------------------------------------------------------------------------------------------------------

 

 

 

-----------------------------------------------------------Filter文件---------------------------------------------------------

package test;

 

import java.io.IOException;

 

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

 

/**

 * 编码-过滤器类

 * 实现过程:类属性->类构造方法->init()方法->doFilter()方法->destroy()方法

 * @author yzp

 *

 */

public class SetCharactorEncoding implements Filter {//此处注意一定是implements javax.servlet.Filter 千万别错了!!!!

 

         private FilterConfig filterConfig;// 过滤器相关信息

         private boolean enable;// 启用过滤器的开关

         private String encodingName;// 目标编码方式名称

 

         /**

          * 构造方法

          */

         public SetCharactorEncoding() {

                   super();

                   this.encodingName = "UTF-8";// 初始化-设置默认编码为UTF-8

                   this.enable = false;// 初始化-设置开关为关闭状态

         }

 

         /**

          * 初始化方法-与配置文件web.xml相对应

          */

         public void init(FilterConfig filterConfig) throws ServletException {

                   // TODO Auto-generated method stub

                   this.filterConfig = filterConfig;// 初始化-filterConfig

                   String flag = this.filterConfig.getInitParameter("enable");

                   // 获得XML配置文件中的<init-param></init-param>中的值

                   if ("true".equals(flag)) {// flag=true 则过滤器开启

                            String encodeName = this.filterConfig

                                               .getInitParameter("encodingName");// 获得编码名称

                            this.enable = true;// 设置属性

                            this.encodingName = encodeName;// 设置属性

                   } else {

                            this.enable = false;// flag=false 则关闭过滤器

                   }

         }

 

         /**

          * 执行过滤器

          */

         public void doFilter(ServletRequest request, ServletResponse response,

                            FilterChain chain) throws IOException, ServletException {

                   // TODO Auto-generated method stub

                   if (this.enable) {// 开关为开

                            request.setCharacterEncoding(this.encodingName);

                            // 设置request的编码为encodingName

                   }

                   chain.doFilter(request, response);

                   // 执行过滤器链-在有多个filter的时候,一个一个执行开着状态的过滤器

         }

 

         public void destroy() {// 销毁方法

                   // TODO Auto-generated method stub

                   this.encodingName = null;

                   this.enable = false;

                   this.filterConfig = null;

         }

 

}

 

 

----------------------------------------------------------------------------------------------------------------------------------

 

 

 

-----------------------------------------------------------XML文件----------------------------------------------------------

 

web.xml文件<web-app></web-app>

 

<filter><!-- 此处是filter标签,千万别写成了servlet,它是个特殊的servlet-->

    <filter-name>SetCharactorEncoding</filter-name>

    <filter-class>test.SetCharactorEncoding</filter-class>

    <init-param>

                       <param-name>encodingName</param-name>

                       <param-value>UTF-8</param-value>

    </init-param>

    <init-param>

                       <param-name>enable</param-name>

                       <param-value>false</param-value>

    </init-param>

  </filter>

  <filter-mapping>

    <filter-name>SetCharactorEncoding</filter-name>

    <url-pattern>/*</url-pattern>

  </filter-mapping>        

 

----------------------------------------------------------------------------------------------------------------------------------

 

 

Jsp 编码设置


1.pageEncoding 是jsp向服务器提交时将中文按怎样的编码.
2.Eclipse/MyEclipse中设置Jsp文件中的默认 存储编码类型 为UTF-8
    window->Preferences->General->Content Types->text下的jsp:Default encoding 修改为UTF-8
3.MyEclipse 新建Jsp文件模版设置 window>preference>MyEclipse>Files and Editors>JSP>JSP Templates但

   是没有UTF-8 有GBK,还有一种是通过路径改变jsp.vtl的 但是我试了不好用啊,以后找到对的方法再补上吧~

 

                                                                                                        

 

                                                                                                         (又是一个不眠之夜,come on ,Jason!)

 

 


 

0
0
分享到:
评论

相关推荐

    servlet与jsp中文乱码处理

    下面将详细阐述servlet和jsp中文乱码的处理方式。 1. **理解编码基础** - **Unicode**:全球统一的字符编码标准,包含了世界上几乎所有的字符。 - **UTF-8**:最常用的Unicode编码方式,它以字节为单位进行编码,...

    JSP中文乱码处理JSP中文乱码处理

    【JSP中文乱码处理详解】 在Web开发中,JSP中文乱码是一个常见的问题,主要涉及页面显示、表单提交以及数据库操作等环节。理解并掌握这些环节的编码处理至关重要,以确保数据的准确性和用户体验。 1. **JSP文件的...

    如何配置Filter过滤器处理JSP中文乱码

    【如何配置Filter过滤器处理JSP中文乱码】 在开发Java Web应用时,尤其是在处理包含中文字符的请求时,可能会遇到中文乱码的问题。解决这个问题的一种常见方法是使用Filter过滤器。以下是配置Filter过滤器处理JSP...

    JSP中文乱码问题分析及处理方法

    ### JSP中文乱码问题分析及处理方法 #### 一、问题根源剖析 JSP(Java Server Pages)作为Web开发中的一种技术,广泛应用于动态网页的生成。然而,在处理中文字符时,JSP经常会遇到“乱码”问题,即中文字符无法...

    jsp 中文乱码 原因及彻底解决办法

    【JSP 中文乱码的原因及解决方法】 在开发基于Java的JSP应用程序时,遇到中文乱码问题是很常见的困扰。这是因为Java的核心和class文件基于Unicode编码,这为跨平台提供了便利,但也引入了处理中文字符时可能出现的...

    jsp中文乱码问题jsp中文乱码问题详解

    3. 表单Get提交方式的乱码处理方式 在使用Get方式提交表单时,如果没有指定提交的编码格式,tomcat将使用iso8859-1编码格式进行提交,这将导致乱码。 解决方法有两种: A. 使用上例中的第一种方式,对接受到的...

    jsp中文乱码的解决方案

    #### 2.7 文件上传乱码处理 文件上传时,需对文件名进行编码转换,例如: ```java String fileName = new String(file.getName().getBytes("GBK"), "UTF-8"); ``` ### 3. 实际案例分析 文档《JSP各种乱码的处理...

    JSP中文乱码问题解决办法

    JSP 中文乱码问题解决办法 JSP 页面中中文乱码问题是指在 JSP 页面中使用中文时,页面显示乱码的现象。这种问题的解决办法可以从多方面入手,包括设置页面的字符编码、使用 POST 方式提交表单、使用 GET 方式提交...

    JSP中文乱码的产生原因及解决方案

    总结来说,解决JSP中文乱码问题的关键在于理解不同环节的字符集设置,并确保它们之间的一致性。从源文件的编码到页面显示、HTTP交互、数据库操作以及文件读写,每个环节都需要正确设置字符集,以确保中文字符能够...

    几种常用解决jsp中文乱码的方案

    JSP 中文乱码是动态网站开发中经常遇到的问题,本文将从产生 JSP 中文乱码的四种类型入手,分析乱码产生的原因,并给出消除乱码的具体方法。 一、页面中文乱码的处理 JSP 采用 ISO-8859-1 作为默认的页面字符编码...

    JSP汉字乱码解决大全

    本文将详细介绍JSP中中文乱码的原因及其解决方法。 #### 二、中文乱码原因分析 中文乱码通常由编码不一致导致,具体可以分为以下几个方面: 1. **请求参数编码问题**:当客户端发送含有中文字符的请求参数时,如果...

    JSP中文乱码问题解决总结

    本篇文章将深入探讨JSP中文乱码问题的原因、解决策略以及预防措施。 一、乱码产生的原因 1. 字符集不一致:JSP页面、Servlet、HTML、CSS、JavaScript、数据库等环节如果使用的字符集不统一,容易导致中文字符在...

    jspsmartupload-解决中文乱码

    最近实验室做了一个项目,使用jspsmartupload来实现的文件的上传下载,原来在windows平台运行的挺好,但是后来系统移植到linux平台上,结果在上传或下载的文件名中有中文时就会出现乱码。后来查了网上一些人的解决...

    jsp 过滤器中文乱码的处理

    本篇文章将详细讲解如何处理JSP中的中文乱码以及如何通过过滤器(Filter)来解决这一问题。 首先,中文乱码的处理主要涉及到字符集(Charset)的概念。在JSP中,当请求参数包含中文字符时,如果不设定字符编码,...

    jsp页面传值中文乱码问题处理.docx

    jsp页面传值中文乱码问题处理 在 JSP 页面中传值时,中文字符可能会出现乱码问题,这是由于字符编码不一致所引起的。下面将详细讲解 JSP 中文乱码种类和解决方案。 JSP 文件中文内容显示乱码 在 JSP 文件中,如果...

    jsp中文乱码问题分析及处理方法.pdf

    ### JSP中文乱码问题分析及处理方法 #### 一、问题背景 在JSP(Java Server Pages)开发过程中,中文乱码问题是一个常见的技术挑战。由于Java内部使用Unicode编码来处理字符,而在实际应用中可能会遇到不同的字符...

    Eclipse 开发JSP中文乱码解决方案

    以下是解决Eclipse开发JSP中文乱码问题的详细步骤和知识点: 1. **Project -&gt; Properties -&gt; Resources** 在这里,你可以设置当前项目的文本文件编码。点击“Text file encoding”选项,然后选择“Other”,在下拉...

Global site tag (gtag.js) - Google Analytics