项目:struts结构。(提交字符传中有"login.do?xp=我的电脑"串)
jsp页面编码为:<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*,java.util.*,java.io.*,java.text.*" errorPage="" %>
提交到tomcat 中的一个Action处理,该action为:
package dtx;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.DynaActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import baseclass.*;
import javax.servlet.ServletContext;
import javax.sql.DataSource;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class LoginAction extends Action{
public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)throws Exception
{
DynaActionForm dyform=(DynaActionForm)form;
String name=(String)dyform.get("username");
String psw=(String)dyform.get("password");
String sp=(String)request.getParameter("xp");
System.out.println("xp="+sp); //这里是乱码,正常。
DataSource datasource=getDataSource(request);
baseclass dbuser=new baseclass(datasource);
strchange xx=new strchange();
String xs=xx.getStr8859(sp);//转换
System.out.println("chinaxp="+xs);//这里是正常中文chinaxp=我的电脑
String a="望闻问切"; //该处设计一个中文字符串,因为在下面的checklogin(...)中要用中文字符串
String ad=xx.getStr8859(a); //转换为ISO-8859-1
System.out.println("8859="+ad); //输出为乱码
String c1=xx.getStrUTF(a); //转换为UTF-8
System.out.println("UTF="+c1); //输出乱码
if(!dbuser.checklogin("用户字典","用户名称","密码",name,psw))// 这里将中文传入到另一个类(B)中进行数据库操作,结果中文到B类中为乱码,如何解决啊!!
{
ActionMessages errors=new ActionMessages();
errors.add(ActionMessages.GLOBAL_MESSAGE,new ActionMessage("label.deny"));
if(!errors.isEmpty())
{
System.out.println("jjjjjj");
saveErrors(request,errors);
}
System.out.println("IIIIIIIIII");
dbuser.closedbk();
return mapping.findForward("failed");
}
else
{
return mapping.findForward("print");
}
}
}getStr8859(String a)函数将a转换为ISO-8859-1编码
getStrUTF(String a)函数将a转换为UTF-8编码
jsp页面编码为:<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*,java.util.*,java.io.*,java.text.*" errorPage="" %>
提交到tomcat 中的一个Action处理,该action为:
package dtx;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.DynaActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import baseclass.*;
import javax.servlet.ServletContext;
import javax.sql.DataSource;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class LoginAction extends Action{
public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)throws Exception
{
DynaActionForm dyform=(DynaActionForm)form;
String name=(String)dyform.get("username");
String psw=(String)dyform.get("password");
String sp=(String)request.getParameter("xp");
System.out.println("xp="+sp); //这里是乱码,正常。
DataSource datasource=getDataSource(request);
baseclass dbuser=new baseclass(datasource);
strchange xx=new strchange();
String xs=xx.getStr8859(sp);//转换
System.out.println("chinaxp="+xs);//这里是正常中文chinaxp=我的电脑
String a="望闻问切"; //该处设计一个中文字符串,因为在下面的checklogin(...)中要用中文字符串
String ad=xx.getStr8859(a); //转换为ISO-8859-1
System.out.println("8859="+ad); //输出为乱码
String c1=xx.getStrUTF(a); //转换为UTF-8
System.out.println("UTF="+c1); //输出乱码
if(!dbuser.checklogin("用户字典","用户名称","密码",name,psw))// 这里将中文传入到另一个类(B)中进行数据库操作,结果中文到B类中为乱码,如何解决啊!!
{
ActionMessages errors=new ActionMessages();
errors.add(ActionMessages.GLOBAL_MESSAGE,new ActionMessage("label.deny"));
if(!errors.isEmpty())
{
System.out.println("jjjjjj");
saveErrors(request,errors);
}
System.out.println("IIIIIIIIII");
dbuser.closedbk();
return mapping.findForward("failed");
}
else
{
return mapping.findForward("print");
}
}
}getStr8859(String a)函数将a转换为ISO-8859-1编码
getStrUTF(String a)函数将a转换为UTF-8编码
String sp=(String)request.getParameter("xp");String sp = new String(request.getParameter("xp").getBytes("iso-8859-1"),"gb2312");
------------------------------------------------
提交请求中的中文已经能被识别!!!!!。
System.out.println("chinaxp="+xs);//这里是正常中文chinaxp=我的电脑现在的问题是在该action中,必须用中文字符串向其他java类中函数传递中文参数,比如:checklogin("用户字典","用户名称","密码",name,psw),我作测试:String a="望闻问切"; 的目的是看中文是否能在这里正确显示,现在不能!!,函数checklogin(.....)中的中文字符到处理类B中是乱码!!!,且在该类中也显示为乱码!!!!~!
<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>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>SetCharacterEncoding</filter-name>
<url-pattern>*.htm</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>SetCharacterEncoding</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>如果是网页里面乱码,加上
<%@ page language="java" pageEncoding="gb2312" contentType="text/html;charset=gb2312" %>就可以了。