怪了,
用Statement直接构造好sql语句插入的时间就不会又乱码,一切正常,
但是在换了
PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(1,"中文中文");
这样的入库的时候,变成乱码勒,别说从页面过来的时候用getByte直接转换,
我现在是直接输入中文都变乱码,
没有任何传值的操作,也就不存在说在request的时候乱码问题,
奇怪勒,杂回事?在另一个项目里面这样做就没任何问题,mssqlserver2000
tomcat6
用Statement直接构造好sql语句插入的时间就不会又乱码,一切正常,
但是在换了
PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(1,"中文中文");
这样的入库的时候,变成乱码勒,别说从页面过来的时候用getByte直接转换,
我现在是直接输入中文都变乱码,
没有任何传值的操作,也就不存在说在request的时候乱码问题,
奇怪勒,杂回事?在另一个项目里面这样做就没任何问题,mssqlserver2000
tomcat6
<!--添加过滤器,解决表单提交时的中文乱码问题-->
<filter>
<filter-name>SetCharacterEncoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB2312</param-value>
</init-param>
</filter> <!-- 要过滤的类型 -->
<filter-mapping>
<filter-name>SetCharacterEncoding</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>SetCharacterEncoding</filter-name>
<url-pattern>*.shtml</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>SetCharacterEncoding</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
就没有从表单request值进来,直接写进去入库然后就乱码了。
public String getApplication () throws UnsupportedEncodingException {
//post=request.getParameter("keywords").getBytes("8859_1");
String postName=this.hrDemandAccept.getPostName();
//String postName="";
if(postName!=null&&!postName.equals("")&&!postName.equals("null")){
String temp=new String(postName.getBytes("ISO8859_1"),"gb2312");
hrDemandAccept.setPostName(temp);
}
//String temp=new String(postName.getBytes("ISO8859_1"),"SHIFT-JIS");
//hrDemandAccept.setPostName(temp);
return SUCCESS;
}
现在的问题是
用Statement直接构造SQL语句插入,没问题,
就是用pst.setString的时候不行,变乱码了。
你从表单接收的产生乱码的属性值,String postName=this.hrDemandAccept.getPostName();
getPostName就你产生乱码的属性值,将它处理一下就行,我遇到过的问题,我就是这样解决的
我没有从表单中获得值,
我现在直接pst.setString(1,"中文中文");
就这样写,到数据库里面都是乱码!
没有request的。To chao19841()
我转什么?我都没获得值,我怎么转?我是直接写一个字符串进去得。
你看看。
如果是默认的ISO8859-1 中文放进去就会出现乱码
public class ChangeEncoding{
public String toChinese(String s){
if(s==null)
return null;
try{
//
String convert=new String(s.getBytes("GBK"),"ISO8859-1");
return convert;
}catch(Exception e){}
return null;
}
}2. 这样的入库:
PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(1,new ChangeEncoding("中文中文"));
我试 过可以的。
2. 这样的入库:
PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(1,new ChangeEncoding().toChinese("中文中文"));
我试 过可以的。
回上面一些朋友:
数据库是mssqlserver,貌似没有mysql中的那个编码问题吧?
还有就是,
编码转换这个地方都用不上,
因为我用Statement构造SQL语句插入的时间,一切都是正常,
就是换到PreparedStatement插入的时候出的问题,而PreparedStatement插入,还不能看到最后的插入结果或者说是插入语句是什么,郁闷.试一下ql308214() 的方法.感谢楼上所有的朋友.