linux,mysql,tomcat 组合的乱码问题解决办法
时间:2007-05-16 来源:Chen@Heng
我想很多朋友在linux下,用tomcat,mysql时都可能会出现这个乱码问题吧,很显然我也没有逃过此劫,不过现在解决了,心情是非常好的.
我是用myEclipes开发布暑web的,很显然这是一个相当好用的工具,她可以为你做很多事,包括现在我还搞不清楚的一些细节.我对此不怎么了解,就不在此写关于她的东西了.
我的所有的web页面都用的是utf8编码,数据库我也用的是utf8,但在我的机器上这一切并不象我想象中的那么顺利就实现了,打开页面时,从数据库读出来的还是乱码.后来我用的tomcat里filters过滤器,才总算暂时没有在页面中没有了乱码,但是在mysql中用客户端工具查询时是乱码,这些原因我不清楚,或许以后能搞明白一部分的.下面我把我的一些具体做法描述如下:
1. mysqld配制件: shell#vi /etc/my.cnf [mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
#add by chenheng
default-character-set=utf8 #加上这一句
2. jstl直接连接到mysql:
<sql:setDataSource driver="com.mysql.jdbc.Driver" user="mysql" password="mysql" url="jdbc:mysql://localhost:3306/netServer?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8"/>
3. web页面: <%@ page contentType="text/html" pageEncoding="UTF-8" %>
4. 在你的web项目下的WEB-INF/lib/class/下面放filters过滤器,这一点你可以直接将tomcat下servlets-example下的filters拷过来直接用
5. web.xml配制文件如下: <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>SetCharacterEncoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
在我的系统上做了这些工作后才总算有了个了段,但负面效果也是存在的(前面已经提到),我将继续关注这个问题,以求弄明白其所以然.
tomcat中乱码出现,post,get用不同的编码处理请求,在上述方法以后,还可能不能解决get引起的乱码,这时可以修改conf/server.xml文件:如下
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true" URLEncoding="utf-8" />
加上红色部分.我个人认为由上可以解决新录入的数据不是乱码,对于以前的数据,可能还得转码导出后才不会是乱码.在此我就不写了,因为我目前还没遇到这样的问题.
我是用myEclipes开发布暑web的,很显然这是一个相当好用的工具,她可以为你做很多事,包括现在我还搞不清楚的一些细节.我对此不怎么了解,就不在此写关于她的东西了.
我的所有的web页面都用的是utf8编码,数据库我也用的是utf8,但在我的机器上这一切并不象我想象中的那么顺利就实现了,打开页面时,从数据库读出来的还是乱码.后来我用的tomcat里filters过滤器,才总算暂时没有在页面中没有了乱码,但是在mysql中用客户端工具查询时是乱码,这些原因我不清楚,或许以后能搞明白一部分的.下面我把我的一些具体做法描述如下:
1. mysqld配制件: shell#vi /etc/my.cnf [mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
#add by chenheng
default-character-set=utf8 #加上这一句
2. jstl直接连接到mysql:
<sql:setDataSource driver="com.mysql.jdbc.Driver" user="mysql" password="mysql" url="jdbc:mysql://localhost:3306/netServer?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8"/>
3. web页面: <%@ page contentType="text/html" pageEncoding="UTF-8" %>
4. 在你的web项目下的WEB-INF/lib/class/下面放filters过滤器,这一点你可以直接将tomcat下servlets-example下的filters拷过来直接用
5. web.xml配制文件如下: <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>SetCharacterEncoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
在我的系统上做了这些工作后才总算有了个了段,但负面效果也是存在的(前面已经提到),我将继续关注这个问题,以求弄明白其所以然.
tomcat中乱码出现,post,get用不同的编码处理请求,在上述方法以后,还可能不能解决get引起的乱码,这时可以修改conf/server.xml文件:如下
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true" URLEncoding="utf-8" />
加上红色部分.我个人认为由上可以解决新录入的数据不是乱码,对于以前的数据,可能还得转码导出后才不会是乱码.在此我就不写了,因为我目前还没遇到这样的问题.
相关阅读 更多 +