[size=medium][align=center]中文乱码问题解决方案汇总 [/align]
中文乱码问题常见的主要是JSP中文乱码、Java源文件中文乱码和CSS源文件中文乱码。其
中JSP中文乱码包括如下几个方面:显示页面乱码、参数乱码、表单乱码和源文件乱码。
首先我们得知道出现种种乱码的原因:最直接的描述就是“编码不一致”,即是说程序的
编码与编程人员的编码不统一。
接下来再来了解解决办法:既然问题出在编码不统一,那么我们就要对编码进行相应
的“转码”操作。可以是我们开发人员自己手动进行转码,也可以做出声明让程序去进行转
码。
下面我们来来逐个分析解决各种中文乱码的问题。
一、JSP显示页面中文乱码
JSP页面显示中文乱码主要是HTML中的中文乱码和JSP中动态输出的中文乱码。例如如下代
码若显示乱码:
<%@ page language="java" import="java.util.*" %>
<html>
<head>
<title>HTML中文显示</title>
</head>
<body>
JSP显示页面中文显示示例:
<% String str = "JSP中动态输出中文显示"; out.print(str); %>
</body>
</html>
这是因为在JSP中没有指定页面显示的编码,出现这种乱码问题我们在页面的首部在添加
一条如下所示的page包引用语句:
<%@ page contentType="text/html; charset=utf-8" %> 向页面指定编码为utf-8,让页
面按照此编码来显示,就能解决如上的乱码问题 。
二、参数中文乱码(表单get提交方式URL传递参数乱码)
使用表单的get提交方式传递的参数存在中文很可能会出现乱码,然而解决这种情况下的
中文乱码的方法比较特殊,转换这个中文字符串或者设置JSP页面显示的编码等都不能解决此
类乱码问题。我们需要修改Tomcat服务器的配置文件才能奏效:打开Tomcat的安装目录中conf
目录下的server.xml配置文件,找到如下所示代码段:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
然后在上述代码段中添加URI的编码设置URIEncoding=“utf-8”,如下所示:<Connector port="8080" protocol="HTTP/1.1" URIEncoding=“utf-8”connectionTimeout="20000" redirectPort="8443" />向程序指名编码类型,重启Tomcat后服务器可以得到正确的页面,中文乱码问题得到解决。
三、表单中文乱码(post方式提交)
使用request.getParameter(“”)的方法获取表单数据时,如果表单中存在中文数据就
可能会出现乱码。这是因为Tomcat中对于post方法提交的表单采用的默认编码为“ISO-8859-
1”,而这种编码格式不支持中文字符。这时候我们就需要转换编码格式了。
此处有两种可选的处理方法:
1)当表单的输入项只有一两个时:在使用request对象的getParameter方法获取表单提交
的数据之后进行转码。例如:
//获取表单数据
String userName = request.getParameter("userName");
//进行转码
userName = new String(userName.getBytes("ISO-8859-1"), "utf-8"));
先从ISO-8859-1格式的字符串中取出字节内容,然后在用utf-8的编码格式重新构造一个新的字符串。经过这样的转换编码以后,所有的中文输入都可以用request对象正常取出。
2)当表单的输入项不止两个时:逐个转码就显得比较麻烦了,此时就需要用到过滤器。此时我们可以使用过滤器filter或者使用request对象的getParameter方法获取表单提交的数据之前先设置解码方式。;例如:
//设置解码方式
request.setCharacterEncoding(“utf-8”)
//获取表单数据
String userName = request.getParameter("userName");
四、MyEclipse中JSP源文件中文乱码
1)MyEclipse中默认的JSP编码格式为ISO-8859-1,当打开由其他编辑器(如文本文档)
编辑的JSP文件时会出现乱码, 此时我们只需要修改Eclipse或者是MyEclipse中对JSP的默认
编码就可以了
MyEclipse的菜单栏中点击“window”preferencesGeneralContent TypesText选中“JSP”如下图所示修改默认编码为“utf-8”
[align=center][img]http://dl2.iteye.com/upload/attachment/0110/4424/754df802-dda9-3004-996d-0d9d22148a95.png[/img][/align]
2)在Eclipse或者MyEclipse当中JSP文件默认的编码为ISO-8859-1,所以在JSP代码中间如果出现中文就不能保存,并且点击保存时会弹出如下所示提示:
[align=center][img]http://dl2.iteye.com/upload/attachment/0110/4426/1754cd30-14ae-3469-8371-f205913622cc.png[/img][/align]
这是因为在JSP源文件中有ISO=8859-1编码无法识别的中文字符,此时我们需要在JSP页面
中声明页面编码格式:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" %>
其中pageEncoding=“utf-8”指明了JSP页面编码采用utf-8,这样就可以正常保存JSP的
源文件了。
五、Java源文件中文乱码
我们经常需要在MyEclipse中进行导入项目文件的操作,但是往往导入的项目中的Java源
文件中含有中文时,都将显示为乱码,这是因为导入的项目的编码方式与我们设定好的
MyEclipse的编码方式不一致,此时我们就需要修改导入的项目的编码方式让中文字符正常显
示。
选中导入的项目名称右击选中“preferences”ResourceText file encoding选
中“Other”,然后选择“UTF-8”(与MyEclipse设置的编码格式一致)保存刷新整个项
目,Java源文件中的中文乱码即可恢复正常。
六、CSS源文件中文乱码
如上所述,我们修改了项目的编码格式之后,Java源文件的中文乱码问题得到解决了,但
是当我们打开CSS文件时却能往往能再次碰到中文显示乱码的问题,这是因为整个项目的编码
格式修改的和MyEclipse设置的编码格式一致了,而CSS文件却还是保存着以前的编码格式,同
样地,此时我们就需要再来修改CSS文件夹或者某个指定的CSS文件的编码格式了:选中CSS文
件夹或者某个CSS文件右击选中“preferences”ResourceText file encoding选
中“Other”,然后选择“UTF-8”(与MyEclipse设置的编码格式一致)保存刷新CSS文
件,中文乱码即可恢复正常。
[/size]
中文乱码问题常见的主要是JSP中文乱码、Java源文件中文乱码和CSS源文件中文乱码。其
中JSP中文乱码包括如下几个方面:显示页面乱码、参数乱码、表单乱码和源文件乱码。
首先我们得知道出现种种乱码的原因:最直接的描述就是“编码不一致”,即是说程序的
编码与编程人员的编码不统一。
接下来再来了解解决办法:既然问题出在编码不统一,那么我们就要对编码进行相应
的“转码”操作。可以是我们开发人员自己手动进行转码,也可以做出声明让程序去进行转
码。
下面我们来来逐个分析解决各种中文乱码的问题。
一、JSP显示页面中文乱码
JSP页面显示中文乱码主要是HTML中的中文乱码和JSP中动态输出的中文乱码。例如如下代
码若显示乱码:
<%@ page language="java" import="java.util.*" %>
<html>
<head>
<title>HTML中文显示</title>
</head>
<body>
JSP显示页面中文显示示例:
<% String str = "JSP中动态输出中文显示"; out.print(str); %>
</body>
</html>
这是因为在JSP中没有指定页面显示的编码,出现这种乱码问题我们在页面的首部在添加
一条如下所示的page包引用语句:
<%@ page contentType="text/html; charset=utf-8" %> 向页面指定编码为utf-8,让页
面按照此编码来显示,就能解决如上的乱码问题 。
二、参数中文乱码(表单get提交方式URL传递参数乱码)
使用表单的get提交方式传递的参数存在中文很可能会出现乱码,然而解决这种情况下的
中文乱码的方法比较特殊,转换这个中文字符串或者设置JSP页面显示的编码等都不能解决此
类乱码问题。我们需要修改Tomcat服务器的配置文件才能奏效:打开Tomcat的安装目录中conf
目录下的server.xml配置文件,找到如下所示代码段:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
然后在上述代码段中添加URI的编码设置URIEncoding=“utf-8”,如下所示:<Connector port="8080" protocol="HTTP/1.1" URIEncoding=“utf-8”connectionTimeout="20000" redirectPort="8443" />向程序指名编码类型,重启Tomcat后服务器可以得到正确的页面,中文乱码问题得到解决。
三、表单中文乱码(post方式提交)
使用request.getParameter(“”)的方法获取表单数据时,如果表单中存在中文数据就
可能会出现乱码。这是因为Tomcat中对于post方法提交的表单采用的默认编码为“ISO-8859-
1”,而这种编码格式不支持中文字符。这时候我们就需要转换编码格式了。
此处有两种可选的处理方法:
1)当表单的输入项只有一两个时:在使用request对象的getParameter方法获取表单提交
的数据之后进行转码。例如:
//获取表单数据
String userName = request.getParameter("userName");
//进行转码
userName = new String(userName.getBytes("ISO-8859-1"), "utf-8"));
先从ISO-8859-1格式的字符串中取出字节内容,然后在用utf-8的编码格式重新构造一个新的字符串。经过这样的转换编码以后,所有的中文输入都可以用request对象正常取出。
2)当表单的输入项不止两个时:逐个转码就显得比较麻烦了,此时就需要用到过滤器。此时我们可以使用过滤器filter或者使用request对象的getParameter方法获取表单提交的数据之前先设置解码方式。;例如:
//设置解码方式
request.setCharacterEncoding(“utf-8”)
//获取表单数据
String userName = request.getParameter("userName");
四、MyEclipse中JSP源文件中文乱码
1)MyEclipse中默认的JSP编码格式为ISO-8859-1,当打开由其他编辑器(如文本文档)
编辑的JSP文件时会出现乱码, 此时我们只需要修改Eclipse或者是MyEclipse中对JSP的默认
编码就可以了
MyEclipse的菜单栏中点击“window”preferencesGeneralContent TypesText选中“JSP”如下图所示修改默认编码为“utf-8”
[align=center][img]http://dl2.iteye.com/upload/attachment/0110/4424/754df802-dda9-3004-996d-0d9d22148a95.png[/img][/align]
2)在Eclipse或者MyEclipse当中JSP文件默认的编码为ISO-8859-1,所以在JSP代码中间如果出现中文就不能保存,并且点击保存时会弹出如下所示提示:
[align=center][img]http://dl2.iteye.com/upload/attachment/0110/4426/1754cd30-14ae-3469-8371-f205913622cc.png[/img][/align]
这是因为在JSP源文件中有ISO=8859-1编码无法识别的中文字符,此时我们需要在JSP页面
中声明页面编码格式:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" %>
其中pageEncoding=“utf-8”指明了JSP页面编码采用utf-8,这样就可以正常保存JSP的
源文件了。
五、Java源文件中文乱码
我们经常需要在MyEclipse中进行导入项目文件的操作,但是往往导入的项目中的Java源
文件中含有中文时,都将显示为乱码,这是因为导入的项目的编码方式与我们设定好的
MyEclipse的编码方式不一致,此时我们就需要修改导入的项目的编码方式让中文字符正常显
示。
选中导入的项目名称右击选中“preferences”ResourceText file encoding选
中“Other”,然后选择“UTF-8”(与MyEclipse设置的编码格式一致)保存刷新整个项
目,Java源文件中的中文乱码即可恢复正常。
六、CSS源文件中文乱码
如上所述,我们修改了项目的编码格式之后,Java源文件的中文乱码问题得到解决了,但
是当我们打开CSS文件时却能往往能再次碰到中文显示乱码的问题,这是因为整个项目的编码
格式修改的和MyEclipse设置的编码格式一致了,而CSS文件却还是保存着以前的编码格式,同
样地,此时我们就需要再来修改CSS文件夹或者某个指定的CSS文件的编码格式了:选中CSS文
件夹或者某个CSS文件右击选中“preferences”ResourceText file encoding选
中“Other”,然后选择“UTF-8”(与MyEclipse设置的编码格式一致)保存刷新CSS文
件,中文乱码即可恢复正常。
[/size]