还没有总结完成.
欢迎一起探讨,全文见:
http://upurban.com/bbs/viewtopic.php?p=426#426write by wei 2006-12-17 环境: tomcat5.0.27+jdk1.4.2_05+eclipse3.2.1+mysql4.1.14
参考文档:
1.http://china.eceel.com/article/study_for_character_encoding_java.htm
2.http://www.chinaunix.net/jh/26/15968.html
3.http://www.javaeye.com/t/14980.html(这篇文章不错) 典型的java程序有哪些地方可能涉及到encoding的问题?
1.数据库的编码.mysql默认采用iso-8859-1(latin1)
2.jdbc连接数据库.
jdbc:mysql://localhost:3306/cms?autoReconnect=true&useUnicode=true&characterEncoding=utf8&mysqlEncoding=utf8
3.java程序中对字符串的编码.
4.jsp中的编码.
4.1.<%@page pageEncoding="UTF8"%>
4.2.<meta http-equiv="Content-Type" content="text/html; charset=utf8">
4.3.request.setCharacterEncoding("UTF8");
4.4.response.setCharacterEncoding("UTF8");
5.tomcat 中connector URIEncoding
欢迎一起探讨,全文见:
http://upurban.com/bbs/viewtopic.php?p=426#426write by wei 2006-12-17 环境: tomcat5.0.27+jdk1.4.2_05+eclipse3.2.1+mysql4.1.14
参考文档:
1.http://china.eceel.com/article/study_for_character_encoding_java.htm
2.http://www.chinaunix.net/jh/26/15968.html
3.http://www.javaeye.com/t/14980.html(这篇文章不错) 典型的java程序有哪些地方可能涉及到encoding的问题?
1.数据库的编码.mysql默认采用iso-8859-1(latin1)
2.jdbc连接数据库.
jdbc:mysql://localhost:3306/cms?autoReconnect=true&useUnicode=true&characterEncoding=utf8&mysqlEncoding=utf8
3.java程序中对字符串的编码.
4.jsp中的编码.
4.1.<%@page pageEncoding="UTF8"%>
4.2.<meta http-equiv="Content-Type" content="text/html; charset=utf8">
4.3.request.setCharacterEncoding("UTF8");
4.4.response.setCharacterEncoding("UTF8");
5.tomcat 中connector URIEncoding
解决方案 »
- 如何将部署在jboss上的项目在tomcat上运行起来?
- jsp页面用button按钮提交,不用form提交,在线等!js代码
- 500 Servlet Exception java.io.FileNotFoundException
- 又出错误了,,org.apache.jasper.JasperException
- 等!!Hibernate下BLOB存取图片的问题
- tomcat中设置多个servlet问题
- 要开发J2EE应用程序用什么工具好?
- 还是jsp连接数据库的问题!
- 这个PrepareStatement语句为什么出错,近来看看?多谢
- 网络高手,请问为什么我不能浏览sohu,chinaren校友录等用jsp的网站?
- 硬件IC卡读取操作
- 求在Struts分页技术源码?在线等
String input = new String(request.getParameter().getByte("ISO8859-1"));
String input = new String(request.getParameter().getByte("ISO8859-1"),"gb2312");
昨天晚上又做了更新,请见:http://upurban.com/bbs/viewtopic.php?t=246
对于高手来说,这是小儿科,或许对大多数初学者,这个会给他们节省不少摸索的时间.
至于Filter,可能不用自己去写,apache的那个拿过来就可以用.不过,自己写好象也很简单.
只是必须要知道什么时候有效.如果没有把编码的方方面面考虑到.单一的filter也有可能产生乱码.其最关键的还是要client,jsp,database配合起来处理.前后一致.
谢谢上面的支持.
(1)首先确定JSP页面头部是否有:<%@ page contentType="text/html; charset=GBK" %>
(2)类似这样的转码:
String param= new String(request.getParameter("param").getBytes("ISO-8859-1"), "GBK");
(3)添加filter字符过滤器,具体做法: 先添加类:import javax.servlet.Filter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.FilterChain;
import java.io.IOException;
import org.apache.log4j.Logger;
import java.net.URLEncoder;/** *//**
* 请求中中文字符串过滤类
*/public class SetEncodingFilter
implements Filter ...{
private Logger logger=Logger.getLogger(this.getClass()); public void init(FilterConfig filterConfig) throws ServletException ...{
} public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException ...{
logger.info("请求转码过滤器===================");
request.setCharacterEncoding("gb2312");
chain.doFilter(request,response);
} public void destroy() ...{
}
}
再注册类到XML里: <filter>
<filter-name>Set Encoding</filter-name>
<filter-class>SetEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Set Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
(4)如果是通过"a.jsp?param=中文"传递参数,则需要:
a.在传参数之前先把参数进行转码:java.net.URLEncoder.encode(param);
取值用java.net.URLDncoder.dncode(param);再转回中文
b.在你的Tomcat目录-->conf目录-->server.xml里找出这段: <Connector
port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true" <!--在里边加上这个参数-->URIEncoding="gb2312"
/>
(5)数据库乱码,首先确定你在插入数据库之前是中文,解决办法: 在数据库的数据库连接URL中加上useUnicode=true&characterEncoding=GBK就OK了。 如果在读取的时候出现乱码用第二种方法解决.http://blog.csdn.net/lip009/archive/2006/09/07/1192022.aspx#521755
-----------------------------------------------------------------
声明:lip009(深蓝忧郁)blog上学习来的。
肯定是有更好解决办法的
通常用UTF-8可能比较好.
UTF-8最好不要写成UTF8.
这个filter应该可以抄来用.
apache上的和这个也几乎一样.
昨天有人提供的连接,一共有3篇文章,对大家应该有帮助.
我的实验也做完了,给出了三种完整的解决方法,代码可以直接拿去用.
详见:
http://upurban.com/bbs/viewtopic.php?p=436#436
估计还会有些问题,欢迎讨论.
request.setCharacterEncoding("UTF-8")
比如多个系统整合的时候.有时候在一个数据库中,要有两种不同编码的table,怎么办呢?
理想是一回事,现实是另一回事.只有具体问题具体分析才行.否则,也用不着你我这些程序员了.
还有很多实际的系统集成应用,是多个厂商的合作.
实际应用中并不是用一个UTF8走遍天下都不怕的.
否则,为什么mysql默认安装不直接只支持utf8呢?
URL上传递中文怎么转都不行,因为与tomcat版本有关.其他的转化就可以了.
get和post是不一样的.
当用get方式时,应该设置tomcat的<connector... URIEncoding="UTF-8">(或者你希望的encoding).这样,在jsp里得到的就是UTF-8编码.
当用post方式时,应该设置request.setCharacterEncoding("UTF-8").这样,jsp里得到的也是UTF-8编码.
不过,mysql的编码也非常复杂.有时候会对结果造成"莫名其妙"的影响.欢迎一起来总结.
可能是数据库的编码问题.要搭配起来用.你把具体的环境报上来,看看是哪个地方不对.
我在windows和linux上都试过了.很正常的说.
port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTiueout="20000"
disableUploadTimeout=utrue"
URIEncoding="UTF-8"/> 但是,对与apache整合的tomcat来说,应该设置提供给apache访问的connector,如下:
<Connector port="8009"
enableLookups="false" redirectPort="8443" debug="0"
protocol="AJP/1.3" URIEnUoding="UTF-8"/>