简简单单----(七)jsp中文乱码六种情况---解决方案
乱码是让人头疼的一件事情,您是否和我一样也遇到过这样的情况,向数据库中添加一条记录,记录是添加上了,到数据库里一看,数据凌乱了。。。顿时我也凌乱了。。。把html文件改为jsp文件,添加了一下jsp page指令重新打开同时发现所有的中文都七十二变了。。是否。。下面我们就一起看看java web中的中文乱码问题。
1、JSP页面出现的中英文乱码:
我们的PageCharset.jsp页面代码如下所示:
<%@ page language="java" import="java.util.*"%>
<html>
<head>
<title>中文显示示例</title>
</head>
<body>
中文显示的示例。
<%
out.print("这里是用jsp输出的中文");
%>
</body>
</html>
当我们在保存我们的文件的时候会出现下面的提示:
整因为在我们的MyEclipse中默认的编码为ISO-8859-1,而ISO-8859-1不支持中文的编码,所以jsp页面代码如果出现中文就不能保存了。对于这样的错误,我们只要在页面上加上支持中文的编码格式就可以了,在jsp页面中加上pageEncoding=“gb2132”
支持中页面的编码格式就可以了。这样我们就能正常保存我们的jsp源文件了。
2、URL传递参数中文乱码
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<html>
<head>
<title>URL传递参数中英文处理示例</title>
</head>
<%
String param = request.getParameter("param");
%>
<body>
<a href="URLCharset.jsp?param='中文'">请单击这个链接</a>
您提交的这个参数为:<%=param %>
</body>
</html>
启动tomcat运行结果出现url传递的中文乱码:
这里我们需要配置tomcat服务器文件,才能解决这个问题。具体方法是,在tomcat的conf目录下找到server.xml配置文件,找到如下代码
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
在后面添加上编码方式,URIEncoding="gb2312" 重新启动tomcat问题就解决了。
3、表单提交中问乱码
对于表单中提交的数据,可以用request.getPraramter("");方法来获取,但是当表单中出现中文数据的时候就会出现乱码。
我们的提交表单的页面,FormCharset.jsp页面如下:
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Form中文处理示例</title>
</head>
<body>
下面是表单内容:
<form action="AcceptFormCharset.jsp" method="post">
用户名:<input type="text" name="userName" size="10" />
密 码:<input type="password" name="password" size="10"/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
我们的AcceptFormCharset.jsp页面:
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Form中文处理示例</title>
</head>
<body>
下面是表单提交以后request取到的表单的数据:<br>
<%
out.println("表单输入的userName值为:" + request.getParameter("userName") +"<br>");
out.println("表单输入的pasword值为:" +request.getParameter("password") + "<br>");
%>
</body>
</html>
提交表单:
结果如下:
我们看到我们在表单中的中文数据出现了乱码,为什么楚翔这种情况呢?是因为我们的tomcat中,对于以post方式提交的表单编码格式默认为ISO-8859-1的编码格式,而这种编码格式是不能编码中文的,所以就会出现乱码的现象了。对于这种情况,我们可以对表单中的数据进行处理,在取得表单参数的时候设置编码方式,我们更改了我们的接受表单数据的页面如下所示:
<%
String userName = request.getParameter("userName");
String passWord = request.getParameter("password");
out.println("表单输入的userName值为:" + new String(userName.getBytes("ISO-8859-1"),"gb2312")+"<br>");
out.println("表单输入的pasword值为:" + new String(passWord.getBytes("ISO-8859-1"),"gb2312")+"<br>");
%>
这样就得到我们想要的效果啦:
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处理的表单编码进行设置。
<filter>
<filter-name>CharsetEncodingFilter</filter-name>
<filter-class>com.bjpowernode.drp.util.filter.CharsetEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharsetEncodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CharsetEncodingFilter</filter-name>
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
学习了乱码的各种情况,以后出现乱码再也不害怕了,即使出现新的乱码问题,我们就会这样分析,编译器本身是什么编码格式的,是和本身的编码不同,还是设置了静态页面的编码,没有设置一些动态数据的编码;是数据库的编码和自己传递给数据库的编码不同吗?等等我们学会了他们之间怎么相互去匹配,程序员如何翻译的这个过程.......加油!
智能推荐
Matplotlib中文乱码解决方案
Matplotlib,jupyter中文乱码解决方案 1–坐标轴中文乱码 2–标题乱码 解决方案 首先下载一种字体 :Mircosoft YaHei UI;如果在C:\Windows\Fonts找到的话就直接拷贝到[your python_install_path]\Lib\site-packages\matplotlib\mpl-data\fonts\ttf目录下。下面就...
Linux:mysql中文乱码解决方案
一般在服务器上刚安装的mysql的编码方式不支持中文,中文会乱码,数据库中的中文会显示“???” 进入mysql命令行,查看mysql的编码方式 查看MySQL的编码方式 修改/etc/my.cnf文件 添加如下数据: 修改完以后重启 此时注意重启是否异常提示,如果没有报异常,进入mysql查看编码格式 重启后在插入一...
CV笔记03:自监督GAN(ss-gan)
无需标注数据,利用辅助性旋转损失的自监督GANs,-- 对抗+自监督的无监督方式 《通过辅助旋转损失进行的自监督GAN》CVPR 2019 论文速看 0.摘要 目前自然图像合成主要是条件GAN,但是其缺点是需要标注数据。 我们利用两种流行的无监督学习技术,对抗训练和自我监督,并朝着缩小有条件GAN和无条件GAN之间的差距迈出了一步。 我们允许网络在代表学习的任务上进行协作,同时相对于经典GAN博弈...
Retrofit(三)上传文件
想了想,觉得还是把自定义的东西放到最后再讲,所以讲下用Retrofit上传文件,就拿上传图片来说,因为上传图片我是想写一个专题的,包括以下: 1.上传图片操作 2.展示图片操作 3.选择图片操作 上传图片这篇讲,用Retrofit,之后我还想写一篇是用httpurlconnection的,因为用它会有个拼接的操作,只有经历过拼接才会更深刻的了解使用Http上传文件的过程。展示图片我其实已经写完了,...
猜你喜欢
Linux安装SQL2019
官方文档 导入公共存储库 GPG **: 为 SQL Server 2019 注册 Microsoft SQL Server Ubuntu 存储库: 使用以下命令进行安装 SQL2019: 包安装完成后,运行 mssql-conf setup,按照提示设置 SA 密码并选择版本,并执行以下命令: 完成配置后,验证服务是否正在运行:...
vue-cli使用vscode编辑器如何自动eslint检测
VSCode 保存时自动ESlint格式化 Eslint 自动格式化 首先安装ESLint插件 2.安装完成后,每次修改完代码都需要执行 "npm run lint"之后才能格式化 打开设置选项 编辑代码settings.json 新建.eslintrc.js文件 根据eslint官网规则(eslint官网),编写eslintrc.js文件 保存之后,今后在保存时就能自动ESL...
搭建VUE脚手架(二)---修改完善cli3
光创建完cli3脚手架只是成功了一半,现在还无法直接使用(确切地说还不好用),还需要继续改造 这是本文修改后项目的目录结构,创建文件时可以参考。 1.创建vue.config.js 2.创建常量配置文件(.env.development和.env.production),用于存放常量 .env.development .env.production 3.ESLink配置(别问为什么,问就是我严格语...
hadoop-zookeeper-hive-flume-kafka-hbase集群,解决登录报错,Cli.sh启动失败,Error: java.lang.UnsupportedClassVersion
1.克隆虚拟机之前清理垃圾 2.选中“克隆虚拟机”:“右键→管理→克隆” 弹窗 操作 1 下一步 2 克隆自:虚拟机中的当前状态 3 创建完整克隆 4 虚拟机命名,选择存储位置 5 完成 3.配置IP 3.1获取地址:vi /etc/udev/rules.d/70-persistent-net.rules 3.2修改本机IP:vi...
访问日志
1.访问日志不记录静态文件 一个网站会有很多元素,比如图片、js、css等静态文件比较多,用户每请求一个页面就会访问很多的静态元素,这些元素的请求都会被记录到日志中去。如果一个网站访问量比较大,那么访问日志就会增加的非常快,甚至一天就可以达到几个GN。这不仅会对服务器的磁盘空间造成影响,更重要的是会影响磁盘的读写速度。  ...
