如何解决在Servlet向数据库写记录时中文乱码?

如何解决在Servlet向数据库写记录时中文乱码?
我用JSP页面向Servlet传了几个数据,用Servlet接收,再用Servlet调用JavaBean往数据库里写,但是提交到数据库后中文是乱码,我从书上学到用ISO-8859-1的方式对中文重新编码,但是这种方法不行,我试过了总是乱码,希望大家帮帮我吧,我下周就要交这个作业了,我把我做的部分代码贴出来,请大家告诉我哪里不对,谢谢了先!

这是我写的转码的Bean:
public class Chinese {
public Chinese(){}
public static String toChinese(String srcStr){//此方法解决中文乱码
String str=null;
try{
byte[] b=srcStr.getBytes("ISO-8859-1");//用ISO-8859-1转换成字节数组
str=new String(b);
}
catch(Exception e){
e.printStackTrace();
}
return str;
}
}

这是向数据库写入的Servlet:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
response.setContentType(CONTENT_TYPE);
PrintWriter out = response.getWriter();
request.setCharacterEncoding("GB2312");
OwnersBean own = new OwnersBean();
DBOperate dbo = new DBOperate();

own.setName(Chinese.toChinese(request.getParameter("ownname").trim()));
own.setAddress(Chinese.toChinese(request.getParameter("address").trim()));
own.setCity(Chinese.toChinese(request.getParameter("city").trim()));
own.setTelephone(Chinese.toChinese(request.getParameter("phone").trim()));
/*
以上三句话调用了toChinese()方法,但不管用,还是乱码,头疼!~
*/
String sql = this.getSQL(own);
out.println(sql);
if (dbo.exeUpdate(sql)) {
request.setAttribute("info", "恭喜,添加用户成功!");
} else {
request.setAttribute("info", "对不起,添加用户失败!");
}

RequestDispatcher dis = request.getRequestDispatcher(
"/addownersresult.jsp");
if (dis == null) {
response.sendError(response.SC_NO_CONTENT);
}
dis.forward(request, response);
out.close();
}
最佳的解决方案是使用UTF-8方案
IIS+resin+apache+mysql /resin+mysql+linux/tomcat+mysql
这几种组全我做过的

如果没有Servlet,只需把信帆梁滑运所有页面统一编码轿升
如果有Servlet非tomcat服务器,只要使用
new String(srcStr.getBytes("ISO-8859-1"),"utf-8");//
如果有Servlet而且又是tomcat,就使用过滤器

Mysql,Mssql,Oracle下我都试过,mysql里无需指定特殊编码,最终你取出来的时候再编码一次就OK了,没有问题.
1.在你的jsp页拦誉如面开始的位置确保写入虚慎:
<%@ page contentType="text/html; charset=GBK" %>
2.用post提交
3.用这个转换方法再试试看
public String transform(String s)
{
String emp = null;
try {
emp = new String(s.getBytes("简启iso-8859-1"));
} catch (UnsupportedEncodingException e) {
System.out.println("中文处理异常:" + e.getMessage());
}
return emp;
}
4.如果还不行的话,尝试将request.setCharacterEncoding("GB2312");此句注释掉.
可以用filter过滤器档尘码对所有的servlet进行过滤,在过行哪滤器里处理字符编码,对所有的字符都是用utf-8
public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException,ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
httpRequest.setCharacterEncoding("兄衫utf-8");
chain.doFilter(request, response);
}
我的丛信解决办法是在渗者轮DOPOST()或者是DOGET()的开始的地方加上
request.setCharacterEncoding("GBK");
response.setCharacterEncoding("嫌拦GBK");
数据库的编码方式设置成GBK或者GB2312
← 上一篇: 下一篇: →