2008-03-26

乱码问题

★★★★★★★★★
★ ★
★ web程序 ★
★ ★
★★★★★★★★★



//==========================//
jsp页面编码:GBK/GB2312

//==========================//
过滤器及配置
package com.cw.util;
public class Filter implements javax.servlet.Filter {

public void destroy() {
// TODO Auto-generated method stub

}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("gb2312");
chain.doFilter(request, response);

}

public void init(FilterConfig arg0) throws ServletException {


}

}
<filter>
<filter-name>filteEncoding</filter-name>
<filter-class>com.cw.util.Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>filteEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


//====================//
数据库设置
库及表的属性字符集都要设为GB2312
在MYSQL安装目录找到my.ini文件,打开后将default-character-set设为GB2312(两处)






★★★★★★★★★
★ ★
★ java程序 ★
★ ★
★★★★★★★★★

package com.cw.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Date;

public class Test {

/**
* @param args
*/
public static void main(String[] args) {

try {
Class.forName("com.mysql.jdbc.Driver");

//在URL中设置字符编码
String url = "jdbc:mysql://localhost:3306/test?user=root&password=mysql&useUnicode=true&characterEncoding=gb2312";
Connection conn = DriverManager.getConnection(url);
PreparedStatement pstm = conn
.prepareStatement("insert into stu(sname,stime) values(?,?)");


pstm.setString(1, "陈伟人的");
pstm.setDate(2, java.sql.Date.valueOf("2008-3-23"));

int count=pstm.executeUpdate();
if(count>0)
System.out.println("insert suc");
try {
//if(rs!=null)
// rs.close();
if(pstm!=null)
pstm.close();
if(conn!=null){
conn.close();
}
} catch (Exception e) {
// TODO: handle exception
}

} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}
评论
weiweichen1985 2008-03-28
mysql+ajax 从action返回值的乱码问题

页面编码是utf-8,mysql数据库编码是gbk

解决方案:

服务器端:
====================================
public ActionForward getcity(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {


String id=request.getParameter("id");

List list=uareaDAO.getcitys(id);
PrintWriter out=null;
try {
out=response.getWriter();
//response.setContentType("text/xml;charset=gbk");
//response.setHeader("charset", "gbk");
response.setHeader("Cache-Control", "no-cache");
out.println("<?xml version='1.0' encoding='utf-8'?>");
out.println("<names>");
for(int i=0;i<list.size();i++){

String name=list.get(i).toString();
StringBuffer sb=new StringBuffer("");
for(int j=0;j<name.length();j++){
if(name.charAt(j)==' '){
sb.append("");
}else{
sb.append(name.charAt(j));
}
}
//对汉字进行编码
name=java.net.URLEncoder.encode(sb.toString(), "utf-8");

out.println("<name>"+name+"</name>");
System.out.println(list.get(i).toString());
}
out.println("</names>");
} catch (IOException e) {
e.printStackTrace();
}
return null;
}



客户端[部分代码]
============================================
var xml=xmlhttp.responseXML;
var names=xml.getElementsByTagName("name");
var city=document.getElementById("citys");
city.innerHTML="";


var name=null;
if(names.length>0){
for(var i=0;i<names.length;i++){
name=names[i];
var option=document.createElement("option");
//对汉字进行解码
option.innerText=decodeURI(name.firstChild.data);
city.appendChild(option);
}
}
weiweichen1985 2008-03-27
补充
对于页面编码是utf-8,把过滤器中对应的设置请求编码也为utf-8即可。。。。
发表评论

您还没有登录,请登录后发表评论

weiweichen1985
搜索本博客
我的相册
E6c390da-d0cb-3350-97d4-83ec6586912c-thumb
2008-6-26
共 122 张
最近加入圈子
存档
最新评论