各种乱码问题解决方案
快逸客户的需求是各种样式的,但乱码问题是总会遇到的,下面整理下各种乱码问题的解决办法,供客户使用解决处理请求编码问题。浏览器于程序之间进行数据传输时,默认的编码是ISO-8859-1。如果数据是其他编码方式,到达目的后就会出现乱码,需要进行转换。有以下几种解决方案,供参考。
注意:不要重复使用多个方案解决同一位置的问题。
页面显示:
jsp中
- <%@ page contentType=”text/html; charset=GB2312″%>
- <HEAD><META HTTP-EQUIV=”Content-Type” CONTENT=”text/html; charset=GB2312″></HEAD>
- 响应结果的编码设置:Servlet 中response.setContentType(“text/html;charset=GB2312″);
页面输入正确显示,进入servlet或action中乱码:
默认情况下,IE浏览器发送请求是用”ISO-8859-1″字符编码,遇到用户用中文数据,要进行转码。
- 先在jsp页面设置httpServletRequest对象的字符编码:<request.setCharacterEncoding(“gb2312″);>
- 还有一种办法使用对String类型的数据进行编码转换,可以在程序任何位置进行:public String convertEncode(String str){ if (str!=null){ str = new String(str.getBytes(“ISO-8859-1″),”GB2312″); }
}
- 使用filter
package filter;
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;
import javax.servlet.http.HttpServletRequest;
/**
* @Description: set Character encoding in project
*/
public class CharsetFilter implements Filter{
/**
* @param “GBK”
* the format of character while get and post int net
*/
public void doFilter (ServletRequest sRequest, ServletResponse sResponse, FilterChain fChain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest)sRequest;
request.setCharacterEncoding(“GBK”);fChain.doFilter(sRequest, sResponse);
}public void init (FilterConfig sConfig) throws ServletException {
}public void destroy () {
}
}
处理数据库编码:
- 安装数据库设置编码字符集
- 如果数据库字符编码为”GB2312″,直接读取,如果是”ISO-8859-1″,数据进行编码转换,
ArrayList list = new ArrayList();
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
String sql = “select lessonId,lessonName,examTime,questionNum,totalScore from exam.exam_lesson”;
conn = DBConnection.getConnection();
try {
stmt = conn.prepareStatement(sql);
rs = stmt.executeQuery();
while (rs.next()){
LessonBean lb = new LessonBean();
String lessonName = rs.getString(“lessonName”);
String lesson_name = new String(lessonName.getBytes(“ISO-8859-1″),”GB2312″);
list.add(lb);
}
} catch (Exception e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} - 如果使用数据库连接池,需要在url的标签指明编码方式:
报表样式" href="http://www.quiee.com.cn/wp-content/uploads/2008/07/luanma1.png">
处理eclipse编码:工具栏–窗口–首选项 ,打开对话框,在树状结构中打开工作台,选择编辑器,把文本文件编码选项设置成需要的字符集。
常见问题:jsp 页面已经设置<%@ page contentType=”text/html; charset=GB2312″%>表单提交后 在servlet中仍然乱码<form action = “” method=”post” >表单method属性值是get或没有设置method属性
发布日期:2008/07/28
本文分类:
设计基础