我作了一个FORM表单,用来提交对数据库的检索条件。检索程序是jsp的。在表单里如果输入的是中文,jsp形成的sql语句就是乱码。后来找了一个类(内容如下),但是还是没有解决。我把这个类的内容贴上,麻烦大家帮看看,谢谢了。如果有什么好的方法也麻烦告诉一下!select * from xiangmu where xmmc like '%??????%'
上面这个是以中文内容提交过来形成的sql语句。下面的是类内容:package Convert; 
  public class isotogb2312 {
    public static String convert(String str) {
     try {
         byte[] bytesStr=str.getBytes("ISO-8859-1");
         return new String(bytesStr,"gb2312");
     } catch(Exception ex) {
       return str;
     }
    }
  }

解决方案 »

  1.   

    我认为是你的编码和解码的问题,传到数据库的编码方式不是ISO-8859-1
    这样会产生你说的那种情况,不妨查看下JSP编码方式!供参考
      

  2.   

    现在检索的jsp页面加上<%@ page contentType="text/html; charset=gb2312" %>
    看行不行,
    再着 你提交的form的method是post还是get,
      

  3.   

    你自己用getbytes这个方法转码啊,他那个类只能从ISO-8859-1转为gb2312.这明显不适合.万一碰上UTF-8的不出乱码才怪.网上这种转码解决乱码的帖子多的是,你干嘛非找现成的类.自己写不是更好
      

  4.   

    byte[] bytesStr=str.getBytes("GBK");
    <%@ page contentType="text/html; charset=GBK" %>
      

  5.   

    谢谢大家,问题还是没有解决。我的中文参数传到后台就已经是乱码了。这是怎么回事呢?
    把这个地方改成GBK  byte[] bytesStr=str.getBytes("GBK"); 还是一样的问题。
      

  6.   

    我看文章是这么说的:JSP文件首先会被编译成servlet类。如果Servlet在运行的过程中,需要接受从客户端传来的字符如:表单输入的值和URL中传入的值,此时如果程序中没有设定接受参数时采用的编码格式,则WEB容器会默认采用ISO-8859-1编码格式来接受传入的值并在JVM中转化为UNICODE格式的保存在WEB容器的内存中。在jsp这边我作了如下设置:
    <%@page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage=""%>  也就是说jsp的页面编码是gb2312,不会影响那边传过来的ISO-8859-1类型的参数。所以用我找的那个类应该是正确的呀。帮忙看看!
      

  7.   

    其实只要在接收参数的页面加上request.setCharacterEncoding("gb2312"),应该就不需要再用你那个函数进行转码了
      

  8.   

    谢谢.在接收参数的页面加上request.setCharacterEncoding("gb2312"),问题已经解决了