项目: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编码

解决方案 »

  1.   

    这个在程序刚开始就应该转码
    String sp=(String)request.getParameter("xp");String sp = new String(request.getParameter("xp").getBytes("iso-8859-1"),"gb2312");
      

  2.   

    to: xueguiping() 
    ------------------------------------------------
    提交请求中的中文已经能被识别!!!!!。
    System.out.println("chinaxp="+xs);//这里是正常中文chinaxp=我的电脑现在的问题是在该action中,必须用中文字符串向其他java类中函数传递中文参数,比如:checklogin("用户字典","用户名称","密码",name,psw),我作测试:String a="望闻问切"; 的目的是看中文是否能在这里正确显示,现在不能!!,函数checklogin(.....)中的中文字符到处理类B中是乱码!!!,且在该类中也显示为乱码!!!!~!
      

  3.   

    在你的web.xml里面加上如下配置。    <!--添加过滤器,解决表单提交时的中文乱码问题-->
        <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" %>就可以了。