jsp中文乱码六种情况---解决方案

2016年10月22日 21:32:55

阅读数:10672

来源:http://blog.csdn.net/lovesummerforever/article/details/12290319

乱码是让人头疼的一件事情,您是否和我一样也遇到过这样的情况,向数据库中添加一条记录,记录是添加上了,到数据库里一看,数据凌乱了。。。顿时我也凌乱了。。。把html文件改为jsp文件,添加了一下jsp
page指令重新打开同时发现所有的中文都七十二变了。。是否。。下面我们就一起看看Javaweb中的中文乱码问题。

1、JSP页面出现的中英文乱码:

我们的PageCharset.jsp页面代码如下所示:

  1. <%@ page language="java" import="java.util.*"%>
  2. <html>
  3. <head>
  4. <title>中文显示示例</title>
  5. </head>
  6. <body>
  7. 中文显示的示例。
  8. <%
  9. out.print("这里是用jsp输出的中文");
  10. %>
  11. </body>
  12. </html>

当我们在保存我们的文件的时候会出现下面的提示:

整因为在我们的MyEclipse中默认的编码为ISO-8859-1,而ISO-8859-1不支持中文的编码,所以jsp页面代码如果出现中文就不能保存了。对于这样的错误,我们只要在页面上加上支持中文的编码格式就可以了,在jsp页面中加上pageEncoding=“gb2132”
支持中页面的编码格式就可以了。这样我们就能正常保存我们的jsp源文件了。

2、URL传递参数中文乱码

  1. <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
  2. <html>
  3. <head>
  4. <title>URL传递参数中英文处理示例</title>
  5. </head>
  6. <%
  7. String param = request.getParameter("param");
  8. %>
  9. <body>
  10. <a href="URLCharset.jsp?param='中文'">请单击这个链接</a>
  11. 您提交的这个参数为:<%=param %>
  12. </body>
  13. </html>

启动tomcat运行结果出现url传递的中文乱码:

这里我们需要配置tomcat服务器文件,才能解决这个问题。具体方法是,在tomcat的conf目录下找到server.xml配置文件,找到如下代码

  1. <span style="font-size:18px">  <Connector port="8080" protocol="HTTP/1.1"
  2. connectionTimeout="20000"
  3. redirectPort="8443"  /></span>

在后面添加上编码方式,URIEncoding="gb2312" 重新启动tomcat问题就解决了。

3、表单提交中问乱码

对于表单中提交的数据,可以用request.getPraramter("");方法来获取,但是当表单中出现中文数据的时候就会出现乱码。

我们的提交表单的页面,FormCharset.jsp页面如下:

  1. <%@ page language="java" contentType="text/html; charset=GB18030"
  2. pageEncoding="GB18030"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
  7. <title>Form中文处理示例</title>
  8. </head>
  9. <body>
  10. 下面是表单内容:
  11. <form action="AcceptFormCharset.jsp" method="post">
  12. 用户名:<input type="text" name="userName" size="10" />
  13. 密    码:<input type="password" name="password" size="10"/>
  14. <input type="submit" value="提交"/>
  15. </form>
  16. </body>
  17. </html>

我们的AcceptFormCharset.jsp页面:

  1. <%@ page language="java" contentType="text/html; charset=GB18030"
  2. pageEncoding="GB18030"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
  7. <title>Form中文处理示例</title>
  8. </head>
  9. <body>
  10. 下面是表单提交以后request取到的表单的数据:<br>
  11. <%
  12. out.println("表单输入的userName值为:" + request.getParameter("userName") +"<br>");
  13. out.println("表单输入的pasword值为:" +request.getParameter("password") + "<br>");
  14. %>
  15. </body>
  16. </html>

提交表单:

结果如下:

我们看到我们在表单中的中文数据出现了乱码,为什么楚翔这种情况呢?是因为我们的tomcat中,对于以post方式提交的表单编码格式默认为ISO-8859-1的编码格式,而这种编码格式是不能编码中文的,所以就会出现乱码的现象了。对于这种情况,我们可以对表单中的数据进行处理,在取得表单参数的时候设置编码方式,我们更改了我们的接受表单数据的页面如下所示:

  1. <%
  2. String userName = request.getParameter("userName");
  3. String passWord = request.getParameter("password");
  4. out.println("表单输入的userName值为:" +  new String(userName.getBytes("ISO-8859-1"),"gb2312")+"<br>");
  5. out.println("表单输入的pasword值为:" + new String(passWord.getBytes("ISO-8859-1"),"gb2312")+"<br>");
  6. %>

这样就得到我们想要的效果啦:

4、数据库操作中文乱码

我们在建立数据库的时候,最好是能选择支持中文编码格式,最好是能和jsp页面编码格式保持一致,这样就尽可能的减少数据库操作中文乱码的问题,最开始的连接数据库的时候,编写好数据库的编码策略,也就是使用这种形式的URL:jdbc:Oracle:thin:@localhost:1521:TEST;userEnicode=true;characterEncoding=gb2312;
这样我们选择的数据库的编码和我们的jsp编码就一致了。

写入到数据库的时候,数据库中中文乱码:

但是如果我们在最开始的时候没有对数据库的编码进行设置,并且我们的数据库中已经有大量的数据的话,我们再向数据库中写入中文数据,数据库中的中文显示为乱码。在写入数据的时候出现乱码,是因为我们在处理表单的时候没有对字符的编码设置,对于这种情况,我们在jsp中或servlet中加入:

rquest.setCharacterEncoding("gb2312");//处理表单请求的时候设置编码。

这样再看我们的数据库,插入的中文字段就不会乱码了。

从数据库中读出中文乱码:

数据库中的中文出现乱码,就是在读取数据库的时候进行转码,这样显示就不会乱码了。我们整理这样的一个转码函数:

public String encoder(String str) throws UnsupportedEncodingException

{

String result = new String(str.getBytes("ISO-ISO-8859-1)"),"gb2312");

}

5 在myeclipse开发工具中打开中文显示乱码

在myeclipse中默认的编码方式为ISO-8859-1,所以打开有其他编译器编码的jsp页面就会出现乱码,是因为两个编译器保存源文件编码格式不同,在UltralEdit可以支持中文,但是在Eclipse对jsp文件的保存方式为ISO-8895-1,这种编码不支持中文,所以就会出现乱码。

对于这种情况,我们可以更改myeclipse默认的编码方案,myeclipse->Window->Preferences->General->Content types->Test->JSP

这样问题就解决啦!

6 Filter批量设置编码格式

我们对于每一个jsp或servlet我们都要设置编码格式,效率有些低,我们的servlet的Filter解决了我们的问题。在前篇写过Filter的解决中文乱码问题的文章,在这里就不赘述了。http://blog.csdn.NET/lovesummerforever/article/details/9924413

需要强调的一点,开始使用Java model1模型的时候,我们在web.xml中配置只需要配置好jsp页面就可以了,在model2模型中我们使用servlet作为控制器,我们就需要在Filter的配置文件web.xml中配置好servlet的设置,对所有的servlet处理的表单编码进行设置。

  1. <filter>
  2. <filter-name>CharsetEncodingFilter</filter-name>
  3. <filter-class>com.bjpowernode.drp.util.filter.CharsetEncodingFilter</filter-class>
  4. <init-param>
  5. <param-name>encoding</param-name>
  6. <param-value>GBK</param-value>
  7. </init-param>
  8. </filter>
  9. <filter-mapping>
  10. <filter-name>CharsetEncodingFilter</filter-name>
  11. <url-pattern>*.jsp</url-pattern>
  12. </filter-mapping>
  13. <filter-mapping>
  14. <filter-name>CharsetEncodingFilter</filter-name>
  15. <url-pattern>/servlet/*</url-pattern>
  16. </filter-mapping>

jsp中文乱码六种情况---解决方案的更多相关文章

  1. JSP 中文乱码显示处理解决方案

    来源: <http://blog.csdn.net/joyous/article/details/1504274> JSP 中文乱码显示处理解决方案 分类: 所有 Web前端 J2EE20 ...

  2. 【转】JSP中文乱码问题终极解决方案

    原文地址:http://blog.csdn.net/beijiguangyong/article/details/7414247 在介绍方法之前我们首先应该清楚具体的问题有哪些,笔者在本博客当中论述的 ...

  3. JSP中文乱码问题终极解决方案

    在介绍方法之前我们首先应该清楚具体的问题有哪些,笔者在本博客当中论述的JSP中文乱码问题有如下几个方面:页面乱码.参数乱码.表单乱码.源文件乱码.下面来逐一解决其中的乱码问题. 一.JSP页面中文乱码 ...

  4. Tomcat 中 jsp 中文乱码显示处理解决方案

    原地址: http://blog.csdn.net/joyous/article/details/1504274 初学JSP,尤其是Tomcat环境(GlassFish默认UTF-8,则不存在此类问题 ...

  5. JSP中文乱码解决方案

    学习JSP的过程中总会碰到中文乱码问题,有的是post方式提交没问题,用get方式提交有乱码,还有的是部署到tomcat中没问题,在Eclipse中启动tomcat,发现用get方式提交有乱码.产生乱 ...

  6. jsp中文乱码 Servlet中文乱码 utf-8

    JSP+Servlet项目中,项目统一使用utf-8编码.配置过滤器过滤所以请求并设置utf-8编码,jsp页面也都设置utf-8,但是还有一点很容易忽视的就是tomcat也要设置utf-8,默认情况 ...

  7. jsp中文乱码解决办法

    一.JSP页面显示乱码 二.表单提交中文时出现乱码 三.数据库连接 大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着您,我现在把我在JSP开发中遇到 的中文乱码的问题及解决办法写出来供 ...

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

    参考Tomcat服务器目录webapps的examples示例 简单配置步骤:1.在项目web.xml文件添加过滤器标记<filter>和<filter-mapping>:2. ...

  9. JSP中文乱码问题的由来以及解决方法

    首先明确一点,在计算机中,只有二进制的数据! 一.java_web乱码问题的由来 1.字符集 1.1 ASCII字符集 在早期的计算机系统中,使用的字符非常少,这些字符包括26个英文字母.数字符号和一 ...

随机推荐

  1. C++ operator new和new operator的区别

    new operator 当你写这种代码: string *ps = new string("Memory Management"); 你使用的new是new  operator. ...

  2. Faster RCNN算法训练代码解析(1)

    这周看完faster-rcnn后,应该对其源码进行一个解析,以便后面的使用. 那首先直接先主函数出发py-faster-rcnn/tools/train_faster_rcnn_alt_opt.py ...

  3. HR招聘_(二)_招聘方法论(招聘原因及原则)

    1 招聘原因 离职 转岗 新增 工作量加大而无法负荷(若为短期工作量的加大可考虑外包或临时雇员) 业务发展需求(新产品线拓展,新事业部组建或组织架构变化等) 2 招聘原则 平等 面试官和候选人双方地位 ...

  4. Vue--vue中的生命周期

    Vue的生命周期: 在理解vue生命周期前要把握它的三个重点: 创建-> 改变 -> 销毁 创建: 1.执行beforeCreate 2.监控data 3.注册事件 4.执行create ...

  5. chrome 浏览器 添加访问助手来访问网上应用商店

    chrome浏览器的强大之处,在于可以chrome浏览器的扩展程序来实现很多功能.然而不能下载扩展程序.可以借助chrome访问助手来实现: 下载chrome访问助手:https://pan.baid ...

  6. Python3 中 configparser 使用注意事项

    在使用configparser时候应注意: ①配置文件(ini文件)的存放位置:配置文件和调用文件放在同一个文件包下面. 使用read()函数读取并解析配置文件时,直接写配置文件(ini文件)的文件名 ...

  7. Python要如何实现(列表)排序?

    排序,是许多编程语言中经常出现的问题.同样的,在Python中,如何是实现排序呢?(以下排序都是基于列表来实现) 一.使用Python内置函数进行排序 Python中拥有内置函数实现排序,可以直接调用 ...

  8. input 手机数字键盘

    要一点击提起数字键盘,安卓只要设置input的类型是number或tel, ios 需要 pattern="number"可以直接打开搜狗输入法的数字键盘,可以输入.和数字如果只能 ...

  9. 六.基本数据结构-双端队列(Deque)

    一.双端队列(Deque) - 概念:deque(也称为双端队列)是与队列类似的项的有序集合.它有两个端部,首部和尾部,并且项在集合中保持不变. - 特性:deque 特殊之处在于添加和删除项是非限制 ...

  10. [React Native] 解析JSON文件

    在编写代码时,开发者有时需要存储一些比较多,在应用程序运行时不需要更改的数据.文件大不便于写在代码中,可以把这些数据存储到JSON文件中. 优点非常明显: 1. 数据存放在单独的文件中,代码精简有条理 ...