在开发jsp应用是经常碰到一些中文乱码问题 请问怎么解决啊
[b]问题补充:[/b]
谢谢各位了 我主要是指一些页面传递上的中文乱码
就那么几种方法 你一个个试试就是了
第一种
request.setCharacterEncoding("你的目标编码");
第二种
tomcat的server.xml中
注意其中的useBodyEncodingForURI="true"这句在默认情况下是没有的,自己加进去
第三种:
写几句代码
<%!
public String codeToString(String str){
//处理中文字符串的函数
String s=str;
try{
byte temp[ ]=s.getBytes("ISO-8859-1");
s=new String(temp);
return s;
}
catch(Exception e){
return s;
}
}
%>
加上这句话应该就ok了:
<%@ page pageEncoding="GB18030"%>;
看看我写的这篇文章
http://jihao.iteye.com/blog/278744
具体问题具体分析。不过一般都是客户端+jsp+数据库的字符编码不一样。你一个一个
看看调调
乱码问题出现的情况很多
1:由于页面之间的编码格式不一致,导致出现乱码
2:传递过程中编码和解码出现问题
解决情况如下
1:统一页面的编码格式,可以都为UTF-8
2:HTML之间的传递出现乱码可以如下,encoding(转码)和uncoding(解码),具体方法忘记了,自行查阅
3:转码:java.net.URLEncoder.encode("字符串","UTF-8");
解码:java.net.URLDecoder.decode("字符串","UTF-8");
4:////////////过滤器
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 {
private String encode;
public void destroy() {
}
public void doFilter(ServletRequest sreq, ServletResponse sres,
FilterChain chain) throws IOException, ServletException {
// 在此截获请求
sreq.setCharacterEncoding(encode);
sres.setContentType("text/html;charset="+encode);
chain.doFilter(sreq, sres);
// 截获响应
}
public void init(FilterConfig arg0) throws ServletException {
encode = arg0.getInitParameter("encode");
}
}
//////////web.xml
encoding
com.skywin.action.filter.EncodingFilter
encode
utf-8
encoding
/*
5:也可以在TOMCAT里面配置,JBOSS或weblogic也有相对应的配置,自己去看看吧
[quote] 我主要是指一些页面传递上的中文乱码 [/quote]
那就是客户端和jsp之间的字符集不一样啊。
你可以写个过滤器来转化
可以参考下文
[url]http://kulinglei.iteye.com/admin/blogs/311068[/url]
你可以把自己的乱码贴出来看看
其实初学jsp的人.经常遇到中文乱码的时候,当初我也常常为了这个头痛.
经过自己在项目和学习中的实践总结出几个解决办法:
页面中传值遇到的中文乱码.一般都是Get请求造成的.如果用form表单提交数据.一般不会出现中文乱码现象. 通常的超链接中传中文.就会出现乱码.
假设: a.jsp 中通过一个超链接 传值给 b.jsp .并且传的是中文.
在b.jsp接受这个参数.
String keyword= "";
if(request.getParameter("keyword")!=null)
keyword=request.getParameter("keyword");
//如果不进行处理当然是乱码.
//解决办法:
String method="";
method = request.getMethod();
if("GET".equalsIgnoreCase(method)){
keyword= new String(keyword.getBytes("iso8859-1"),"gbk");
}
//我的实践经验是如果是post请求如果采用上面的操作,仍然是乱码.所以只对get请求进行处理. 后面的gbk应该跟你a.jsp和b.jsp的页面相同. a.jsp 和b.jsp的编码当然最好也应该相同
//上面的方法.只是中文乱码情况中的一种.
采用JSPGen4 远离乱码困扰