1.首先,检查JSP页面声明的编码是否正确,正确示例(注意标红的地方):
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!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=UTF-8"> <title>Insert title here</title> </head> <body> </body> </html>
2.在确认步骤一没有问题后,接下来检查项目属性编码、 JSP 页面属性的编码和 Java 文件的属性编码,项目属性编码和文件属性编码也需要统一设置为 UTF-8
3.检查 Tomcat 的编码,需要把 Tomcat 的编码也设置为 UTF-8,找到 Tomcat 安装目录下的 conf 目录下的 server.xml 文件,如果没有修改过 Tomcat 的端口,则直接搜索8080 ,找到对应的 Connector 标签加上 URIEncoding 属性,值为 UTF-8。Tomcat8以及later基本不用改,默认为utf-8.
4.是否因为远程服务器发送过来的字符流是传输内容的UTF-8编码,而客户端获得字符流后,以JVM默认的编码重新解析为字符串,因服务器-客户机编码不一致,而导致了乱码问题。
Java虚拟机中字符串编码默认跟随操作系统,中文版的Windows系统编码为GBK,Linux系统为UTF8,如果需要手动设定编码,可以在JVM启动时添加以下参数:
-Dfile.encoding=UTF-8
新问题:添加以上参数后,java程序输出到标准输出(也就是常见的控制台)时,日志编码也会是utf8,但MyEclipse的Console、Windows的cmd窗口,并不知道应该以UTF8编码来解析jvm输出的字符,所以会出来乱码问题。为了让JVM输出编码与控制台接收端保持一致,需要手动设置控制台接收编码。
eclipse中右击当前文件,run as---->run configuration------>common----->Encoding
或者如下图所示,点击绿色旁边向下的三角,run configuration
5.是否因为eclipse 工作空间编码格式
【Window】→【Preferences】→【General】→【Workspace】