在做一个搜索系统的时候,遇到以下问题.
直接在浏览器中参数带中文,在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=测试
可以接受到中文...
恳求各位大牛给个指点,如何解决这个问题.
直接在浏览器中参数带中文,在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=测试
可以接受到中文...
恳求各位大牛给个指点,如何解决这个问题.
好像传的时候不直接传中文的吧..要把中文转为unicode吧...具体偶也不记得了...肯定不是这样直接传中文的..
<Connector port="8080"...... URIEncoding="GB18030"/>
肯定是可以传递中文的,你看我的帖子,baidu google都是可以直接在浏览器改写中文进行搜索的,to Landor2004 我的服务器是web sphere
继续期待大家的帮助
默认方式下 Windwos ie 采用iso-8859-1方式
也有的是默认utf-8你可以在服务端转码,
转码可以根据你自己定义的参数,也可以根据客户端的编码自己的页面,服务器转码器要统一编码。websphere有转码器文档可以搜一下啊
request.setCharacterEncoding(charset);
试试,例如:request.setCharacterEncoding("GB2312");
String q = request.getParameter("q");//
System.out.println(q);
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);
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>======================
这个方法很好用,应该可以解决你的问题