关于struts2,mysql,hibernate的开发环境下的中文显示为“问号”的问题总结

来源:互联网 发布:周易 知乎 编辑:程序博客网 时间:2024/05/01 14:39

   ~前天刚开始学Hibernate~一切还比较顺利~但是突然发现插入mysql数据库的中文全都是问号,于是开始上网查解决的办法。我一直以为是自己在MyEclipse的编码字符集不对,于是乎几乎把所有的方法都试了一遍,但是还是问号问号。。。开始自己没有思考为什么会这样,后来我把输入的中文在每个前台页面和每个后台action都输出来看看,结果发现都是正确的。于是,想到了差不多应该是数据库的问题。

于是开始改mysql的字符集。也不知道为什么mysql的默认字符集会是latin1~但我配置mysql的时候明明选择了默认字符集为utf8,但是重启后还是latin1~后来才发现原来是没有勾第三个复选框--自己选择字符集。。我囧死了。。后来改好了~一切OK~漂亮的中文字出来了~我的“心神不宁”也消失了~~以上纯属自己的牢骚,反正在公司这几天也没什么事~没人关心我~自己写篇日记玩着玩呗。。我把关于解决乱码的问题总结了一下~大部分都是网上的前辈的经验~~

       1.页面

  • 每个页面上加上  这样在jsp页面里,点右键,查看编码方式则为UTF-8.

  • 也可以把设置myEclipse中默认的contentTyepe。步骤是:windows->preferences->Generl->ContentType.然后设置成UTF-8.一定要update~~
  • 在JSP页面头部加入下面这句话,告诉浏览器应该调用UTF-8的字符集。

 

2.数据库连接语句

  •  设置characterencoding为UTF-8 如jdbc.mysql.url=jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=UTF8
  • 如果使用Hibernate,那就把所有的配置文件头部的编码格式改成UTF-8。

3.Tomcat

  •    为了保证get/post数据都采用相同的UTF8编码,我们在server.xml中进行了如下设置: <Connector port="8080" protocol="HTTP/1.1"                connectionTimeout="20000"                redirectPort="8443"  URIEncoding="UTF-8" />

4. struts2配置

  • struts2在配置struts.properties文件中加上struts.i18n.encoding=UTF-8 或者在struts.xml里加上<constant name="struts.i18n.encoding" value="UTF-8" />
  • jsp向action提交数据时出现乱码时,在web.xml加入filter(必须在filterDispatcher之上!!)。

 

5.数据库(mysql)

可以先输入查询语句SHOW VARIABLES LIKE 'character_set_%';,查看所有的编码是否是UTF-8.

如果不是可以使用Server Instance Config 把默认的字符集设置为utf-8或者修改/MySQL/MySQL Server 5.0/my.ini中的default-character-set=utf8。