在做一个搜索系统的时候,遇到以下问题. 
直接在浏览器中参数带中文,在java servlet中无法接受,并转换为中文. 
举例如下: 
开启一个IE.输入如下: 
search/index.jsp?q=中国 然后接受 
String q = request.getParameter("q");// 
System.out.println(q);//这样接受打印直接为乱码, 然后尝试转换 q = new String(q.getBytes("iso-8859-1"), "GB18030");//字符转换 
System.out.println(q);//结果打印出来还是乱码,无奈了,奇怪了,这种情况怎么办呢 搜索下了也没有找到答案... 迷茫中,发现居然baidu 和google 也是这样传递参数,但不是乱码 
例如,打开一个浏览器,直接输入 
http://www.google.cn/search?hl=zh-CN&q=测试&meta=&aq=f http://www.baidu.com/s?wd=测试 
可以接受到中文... 
恳求各位大牛给个指点,如何解决这个问题.

解决方案 »

  1.   


    好像传的时候不直接传中文的吧..要把中文转为unicode吧...具体偶也不记得了...肯定不是这样直接传中文的..
      

  2.   

    如果是tomcat的话,更改tomcat/conf下的server.xml文件
    <Connector port="8080"...... URIEncoding="GB18030"/>    
      

  3.   

    to w111222j :
    肯定是可以传递中文的,你看我的帖子,baidu  google都是可以直接在浏览器改写中文进行搜索的,to Landor2004 我的服务器是web sphere
    继续期待大家的帮助
      

  4.   

    浏览器一般是不会直接传中文的
    默认方式下 Windwos ie 采用iso-8859-1方式
    也有的是默认utf-8你可以在服务端转码,
    转码可以根据你自己定义的参数,也可以根据客户端的编码自己的页面,服务器转码器要统一编码。websphere有转码器文档可以搜一下啊
      

  5.   

    不要显式进行字符集转换,在获取参数前,调用:
    request.setCharacterEncoding(charset);
    试试,例如:request.setCharacterEncoding("GB2312");
    String q = request.getParameter("q");// 
    System.out.println(q);
      

  6.   

    q=escape("中国").split("%");
    public static String aaa(String word) {
    int j=word.indexOf("codeis");
    while(j!=-1){
    String tmp=word.substring(j+6, j+10);
    String buf =String.valueOf((char)Integer.parseInt(tmp, 16));
    word=word.substring(0,j)+buf+word.substring(j+10);
    j=word.indexOf("codeis");
    }
    return word;
    }
    String q=request.getParameter("q");
    q=q.replaceAll(",20", " ");
    q=q.replaceAll(",u", "codeis");
    q=aaa(q).trim();
    System.out.print(q);
      

  7.   

    楼上的这个什么意思?q=escape("中国").split("%");   这句什么意思?我再明确下,无法在传递参数前对参数进行转码,因为这个url串 是用c#发送给我的,我只能接受这个参数q,然后进行转码处理
      

  8.   

    写一个过滤器
    import java.io.IOException;
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;//过滤器,解决中文乱码问题的方法public class EncodingFilter implements Filter { String encoding = null;
    FilterConfig filterConfig = null;

    //初始化方法
    public void init(FilterConfig filterConfig) throws ServletException {
    // TODO Auto-generated method stub
    this.filterConfig = filterConfig;
    this.encoding = filterConfig.getInitParameter("encoding");
    } //过滤处理方法
    public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
    // TODO Auto-generated method stub
    if (encoding!=null){
    //对请求进行编码设置
    request.setCharacterEncoding(encoding);
    }
    //将处理权转交给下一个处理器
    chain.doFilter(request,response);
    } //销毁方法
    public void destroy() {
    // TODO Auto-generated method stub
    this.encoding = null;
    this.filterConfig = null;
    }
    }======================
    在配置web.xml
    <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>com.office.tools.EncodingFilter<你的这个类的路径></filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8<这个地方改写的跟你的jsp的编码一致></param-value>
    </init-param>
    </filter>
    <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <servlet-name>action</servlet-name>
    </filter-mapping>======================
    这个方法很好用,应该可以解决你的问题