前台使用HTML (utf-8编码)
后台使用Struts2 (utf-8编码)
前台与后台使用AJAX通讯 (也是utf-8)
数据库使用MySql (utf-8编码)
Eclipse的工程使用utf-8编码
所有的东西都是使用utf-8编码。1. 如果Tomcat是从Eclipse中启动的,从HTML传到Struts2再保存到数据库中,所有的中文都不会乱码,在MySql中看到的中文是正常的。2. 如果Tomcat是直接从终端使用命令启动,这时从HTML传到MySql的中文,在MySql全是乱码,但页面中可以正常显示这些中文。可是这时页面中显示的中文如果是在Eclipse启动Tomcat时输入的,则是乱码。这问题很奇怪,估计是终端的编码影响了Tomcat.但是我的终端是支持utf-8的。
后台使用Struts2 (utf-8编码)
前台与后台使用AJAX通讯 (也是utf-8)
数据库使用MySql (utf-8编码)
Eclipse的工程使用utf-8编码
所有的东西都是使用utf-8编码。1. 如果Tomcat是从Eclipse中启动的,从HTML传到Struts2再保存到数据库中,所有的中文都不会乱码,在MySql中看到的中文是正常的。2. 如果Tomcat是直接从终端使用命令启动,这时从HTML传到MySql的中文,在MySql全是乱码,但页面中可以正常显示这些中文。可是这时页面中显示的中文如果是在Eclipse启动Tomcat时输入的,则是乱码。这问题很奇怪,估计是终端的编码影响了Tomcat.但是我的终端是支持utf-8的。
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="utf-8" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="utf-8" />2. 在终端的.bash_profile中加了
export LANG=zh_CN.UTF-8
export LC_CTYPE="zh_CN.UTF-8"
设置终端的默认编码为utf-8。但是问题仍然还是一样的。
pageEncoding="utf-8"%>
mysql配置:jdbc:mysql://localhost:3306/ssh?characterEncoding=gb2312
还有就是mysql自身也有编码设置,就是在创建一个数据库的时候有一个字符编码设置选择,你看看你选择的是什么编码
Eclipse使用的Tomcat插件是TomcatPlugin: http://www.eclipsetotale.com/tomcatPlugin.html#A3
郁闷的是使用Eclipse启动Tomcat没有乱码问题,Eclipse的workspace的编码使用的也是utf-8.
从终端启动就出现了。
bin/catalina.sh里加了句CATALINA_OPTS="$CATALINA_OPTS -Dfile.encoding=UTF-8"使tomcat在utf-8环境下运行才可以。昨天我还在想因为可以使用java -Dfile这个命令指定class文件运行的编码环境,可不可以让tomcat也使用这个,刚好在你的贴子里发现了,谢谢!!!
1、Eclipse菜单Run->Run Configurations选中你的Tomcat启动项,右边选项卡选择Common,其中有一项Encoding,你可以在GBK和UTF-8之间切换下试试看,应该能够试出跟你在终端直接启动Tomcat一样的情况;
2、在Eclipse中启动Tomcat,使用的server.xml是独立的,你选择项目列表中的Server,找到你的Tomcat配置目录,查看其中的server.xml与你的Tomcat安装目录下的conf/server.xml有否不同,尤其注意下URIEncoding关键字;
3、HTML提交给服务器时,你的程序收到信息时先在控制台上打印出来,看看是否编码正确(控制台上的输出会自动适应编码,只要内部Unicode是正确的),如果这一步都错了,就检查URI编码设置,如果正确的话,就要看数据库连接的编码设置了!
多数人用的windows简体中文版,java默认启动时file.encoding=GBK
如你之前所说,你的eclipse把workspace设置成了UTF-8编码,所以在内嵌启动时自动设置了file.encoding=UTF-8
你可以做这样一个尝试:Run configure->Tomcat->Common(按你说的初始编码应该是UTF-8),你改成GBK就会跟你在终端独立运行tomcat的情况一样!
但从根本上来说,你访问数据库的乱码是因为java使用file.encoding指定的编码去访问Mysql,如果你让两者一致就没有问题,相反就乱码了!另外我记得Mysql是可以在连接时指定数据库编码的(改file.encoding毕竟如鲠在喉)