JAVA培训
位置:首页Java开发Java SE
 问题状态
 
struts中前台form数据提交至sqlserver2000乱码,一样的代码,线下和线上完成相反
 悬赏分:100  已经过期   过期时间2007-7-7 13:39
strut中前台form数据(中文)提交到sqlserver2000,代码中我提交至数据前使用如下方法转换数据从gbk到ISO-8859-1,请看下码:
String newdate = new String(testString.getBytes("GB2312"),"ISO-8859-1");
后线下数据库中新提交的为乱码,而线上则正常。
而假如,不用String newdate = new String(testString.getBytes("GB2312"),"ISO-8859-1");进行处理,则线上为乱码,而线上则正常。这到底怎么回事。希望专家能给尽快解决,公司要求我尽快将东西做出,这个问题我忙了一天一夜啦?
其它说明:
jdk和tomcat线上与线下安装版本一样
程序代码线上和线下一模一样。
线下操作系统为winxp+sp2,sqlserver2000为标准版+sp4
线上操作系统为win20003server版,sqlserver2000企业版+sp4
结上与线下的数据库表结构一模一样。
提问者:131452@gmail.com  - 头衔:开发爱好者   
    
    
 回复答案 共11条
  我觉得编码放在ActionServlet里面更好,不知道李老师怎么看?
    回答者:liwenzheng.love@163.com  - 头衔:开发爱好者 2008-1-18 20:35:25  

  写一个类继承ActionServlet 重写方法process
request.setCharacterEncoding("gbk");
super.process(request,response);
这个在STRUTS里面用来统一编码别忘记了修改配置文件,将action的class设置这个类
不知道能否帮助你,试试吧
由于在网吧,没有详细的资料写上来。
    回答者:liwenzheng.love@163.com  - 头衔:开发爱好者 2008-1-18 20:33:21  

  很难
    回答者:yinxiaoyan_hello@163.com  - 头衔:开发爱好者 2008-1-17 10:11:51  

  同意qyket@sohu.com的观点,这个方法我用过。但补充一点,重写processPreprocess方法后,记得在Struts配置文件中加入 <controller>元素,在里边加入相对应的类。
    回答者:ximing1107@163.com  - 头衔:初级程序员 2007-11-26 19:09:54  

  过滤器 统一 UTF-8
    回答者:dmewy213@gmail.com  - 头衔:开发爱好者 2007-10-31 22:24:59  

  呵呵
    回答者:mengwei802@126.com  - 头衔:开发爱好者 2007-9-22 18:41:15  

  我在用struts做项目的时候,向数据库里面添加数据时也遇到过乱码问题。我的解决方法是:在 ActionForm 里面添加一个方法,具体如下:
public void reset(ActionMapping actionMapping,HttpServletRequest request) 
{
   request.setCharacterEncoding("gb2312");
}

您可以试试这个方法,看看行不
    回答者:wanbao105@163.com  - 头衔:开发爱好者 2007-9-19 0:32:26  

  重写一个类的方法:
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.config.ForwardConfig;
import org.apache.struts.action.RequestProcessor;
import org.apache.commons.logging.Log;
public class MyRequestProcessor extends RequestProcessor {
 protected boolean processPreprocess(HttpServletRequest request,HttpServletResponse response)
 {
  try {
   request.setCharacterEncoding("gb2312");
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return true;
 }
}
    回答者:qyket@sohu.com  - 头衔:开发爱好者 2007-9-12 11:19:58  

  统一用 UTF-8 
    回答者:yxxcrtd@gmail.com  - 头衔:开发爱好者 2007-7-26 12:40:11  

  sqlserver不用转编码,页面设置为utf-8或者gb2312都可以,如果转编码反而会容易出错的,我现在的就是和你的环境一样的
    回答者:longhailing20@163.com  - 头衔:开发爱好者 2007-7-13 9:38:19  

  你插入数据的时候,用 
/** 
* 转变字符串的乱码函数 
* @param str 
* @return 
*/ 
public String getStr(String str) 
{ 
try{ 
String temp_p = str; 
byte [] temp_t = temp_p.getBytes("ISO8859-1"); 
String temp = new String(temp_t); 
return temp; 
} 
catch(Exception e){ 
return "null"; 
} 
} 
//向bean里面赋值 
public void setAction(String action) { 
this.action = getStr(action); 
} 
public void setAddmanagerid(String addmanagerid) { 
this.addmanagerid = getStr(addmanagerid); 
} 
转换一下,看看可以吗,我的数据库是ORACLE没问题。  
    回答者:911junjun@163.com  - 头衔:初级程序员 2007-7-10 13:15:27  

我的回答:
回答即可得10分,被采纳则可得50分+悬赏分。
  验证码

 
 
最新问题
欢迎使用本系统,智囊团。踊跃回答,赢得积分。

使用有问题请到 帮助
 
关于我们 | 商务合作 | 招聘信息 | 客服中心 | 服务条款 | 免责声明 | 网站导航 |java培训QQ留言
Copyright 2007 zhinangtuan.net.cn all rights reserved 版权所有