前台使用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的。

解决方案 »

  1.   

    1. Tomcat的server.xml的两个Connector中都加了URIEncoding="utf-8", 强制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。但是问题仍然还是一样的。
      

  2.   

    应该还是编码不统一造成的看看jsp页面及mysql配置的driver中的编码设置jsp编码<%@ page language="java" contentType="text/html; charset=utf-8"  
        pageEncoding="utf-8"%>
    mysql配置:jdbc:mysql://localhost:3306/ssh?characterEncoding=gb2312
    还有就是mysql自身也有编码设置,就是在创建一个数据库的时候有一个字符编码设置选择,你看看你选择的是什么编码
      

  3.   

    jdbc:mysql://localhost:3306/ssh?characterEncoding=utf8
      

  4.   

    请问你Eclipse用的是什么插件启动tomcat? myeclipse还是wtp?
      

  5.   

    应该还是编码不一致的问题,应该是问题出在tomcat中
      

  6.   

    告诉你个方法  正确的  在后台 用一个字符转换的方法 从页面获取的   或者从数据库读取的都通过转换方法转换 那就OK了   我之前开发的时候都是这样弄的。  也是MySQL不过具体的代码我现在手上没有。 
      

  7.   

    将整个项目的编码设置为utf-8
      

  8.   

    又是乱码问题 全设置层utf-8  再写个过滤器!
      

  9.   

    你们所说的,我全用了utf-8编码。
    Eclipse使用的Tomcat插件是TomcatPlugin: http://www.eclipsetotale.com/tomcatPlugin.html#A3
    郁闷的是使用Eclipse启动Tomcat没有乱码问题,Eclipse的workspace的编码使用的也是utf-8.
    从终端启动就出现了。
      

  10.   

    看看我的经历,不同的是我用netbeans,其他的都一样...............http://topic.csdn.net/u/20100811/19/c533df92-3532-49d4-8e5c-7f94bed6502e.html
      

  11.   

    很有帮助,最后在
    bin/catalina.sh里加了句CATALINA_OPTS="$CATALINA_OPTS -Dfile.encoding=UTF-8"使tomcat在utf-8环境下运行才可以。昨天我还在想因为可以使用java -Dfile这个命令指定class文件运行的编码环境,可不可以让tomcat也使用这个,刚好在你的贴子里发现了,谢谢!!!
      

  12.   

    TomcatPlugin貌似就是用的tomcat目录中的配置文件。
      

  13.   

    我没有办法直接告诉你是什么问题,但是可以给你几条路去排查下:
    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编码设置,如果正确的话,就要看数据库连接的编码设置了!
      

  14.   

    看来你已经解决问题了,至少已经解除的问题的根源了!
    多数人用的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毕竟如鲠在喉)