我做的一个电子拍卖系统的项目(这是一个用struts1.2+hibernate3.1+spring2.0三大框架集成做的项目),出现了中文乱码问题,自己想尽办法还是搞不定,所以来求助大虾们。1.在我的web.xml文件中通过<jsp-config>标签我把所有页面的编码改成了UTF-82.自己手动添加了一个类来继承ActionServlet,并在其中加入了一个方法(方法里的参数我在这里就用..代替了)
process(..){
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
super.process(..);
}
然后在web.xml文件中,我就让它加载我自己手写的这个类
结果我进行数据库操作时,居然插入到数据库中的中文字符都变成了乱码。
有谁能帮帮我呀?
process(..){
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
super.process(..);
}
然后在web.xml文件中,我就让它加载我自己手写的这个类
结果我进行数据库操作时,居然插入到数据库中的中文字符都变成了乱码。
有谁能帮帮我呀?
解决方案 »
- dom4j写xml文件自动生成xmlns=""属性的问题
- 怎么把String转成Date
- 全国各地程序员的现状和收入
- jetty 在 app engine 使用 多线程
- jsp中嵌入APPLET 使用jmf 刷新页面时会出现java.io.IOException: Capture device in use
- struts2.0.14中没有<s:tree>标签吗?
- [200分]在jboss3.2.6上部署webservice老是出现如下错误!·(急急急急急急急急急急急急急)
- 如何用循环遍历一个类的所有get方法
- 关于用socket传多个文件的问题,哪位大侠帮帮忙,非常感谢!!!
- EJB部署在远程服务器以后怎么调用?
- linux WebSphere 乱码
- 如何解决在weblogic下commons-net-ftp的FTPClient.listFiles()返回null
什么数据库?以mysql为例,需要使用他的配置向导一路next,修改它的编码为utf-8,并重启,删掉表结构重新导入。
另外有时jdbc存中文进去后从mysql控制台里看是乱码,但是用jdbc取出后仍是正码。
包括数据库 JSP
可以在sturts.xml设置编码常量 <constant name="struts.i18n.encoding" value="utf-8" />
数据库url加上编码 ?useUnicode=true&characterEncoding=utf-8
再不行 加上过滤器<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;public class SetCharacterEncodingFilter implements Filter { protected FilterConfig filterConfig;
protected String encodingName;
protected boolean enable; public SetCharacterEncodingFilter() {
this.encodingName = "UTF-8";
this.enable = false;
} public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
loadConfigParams();
} private void loadConfigParams() {
// encoding
this.encodingName = this.filterConfig.getInitParameter("encoding");
// filter enable flag...
String strIgnoreFlag = this.filterConfig.getInitParameter("enable");
if (strIgnoreFlag.equalsIgnoreCase("true")) {
this.enable = true;
} else {
this.enable = false;
}
} public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if (this.enable) {
request.setCharacterEncoding(this.encodingName);
}
chain.doFilter(request, response);
} public void destroy() {
}}
然后再web.xml文件中配置下
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>com.yourcompany.common.framework.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>enable</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException { HttpServletRequest request_1 = (HttpServletRequest) request;
HttpServletResponse response_1 = (HttpServletResponse) response; // 转换编码,并且加上去缓存
request_1.setCharacterEncoding("GBK");
response_1.setCharacterEncoding("GBK");
chain.doFilter(request, response); }
3、第三种就是 如果用doGet()提交,后面跟的参数如果也是中文,这个解决方法可以在tomcat或JBoss的配置文件里面配置,以tomcat为例:
<Connector port="8099" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/>
在这里面最后加上URIEncoding="GBK".
4、ajax也会产生乱码问题,这个问题可以在tomcat的配置那里解决。 5、文件上传时文件名也会出现乱码。
可以用此方法paramMap.put(fi.getFieldName(), new String(fi.getString().getBytes("ISO-8859-1"),"GBK"));
解决办法:servlet:resp.setContentType("text/html;charset=gbk");
Jsp: <%@ page contentType="text/html;charset=gb2312"%>
注意:一定要写在PrintWriter out = resp.getWriter();之前
场合:解决get方式乱码问题:
解决办法:修改server.xml ?URIEncoding="GBK"
场合:解决post方式提交内容的乱码
解决办法:request.setCharacterEncoding("GBK");
注意:一定要写在存取第一个参数之前
不要调用response.setCharacterEncoding("GBK");
场合:<jsp:param name="user" value="<%=s%>"/>,url地址包含中文参数
解决办法:<%request.setCharacterEncoding("GBK");%>
怎么改数据库的编码?我的数据库用的是oracle9i
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
使用String.getBytes("")
修改服务器的server。xml文件
在eclipse里面把文件属性里面的编码也改成utf-8