﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-周游世界-随笔分类-WEB开发</title><link>http://www.blogjava.net/yanzhou/category/15410.html</link><description>喂马, 劈柴, 周游世界</description><language>zh-cn</language><lastBuildDate>Thu, 01 Mar 2007 02:37:39 GMT</lastBuildDate><pubDate>Thu, 01 Mar 2007 02:37:39 GMT</pubDate><ttl>60</ttl><item><title>[ZZ] 解决web开发中的中文问题</title><link>http://www.blogjava.net/yanzhou/archive/2006/09/19/70535.html</link><dc:creator>周游世界</dc:creator><author>周游世界</author><pubDate>Tue, 19 Sep 2006 07:09:00 GMT</pubDate><guid>http://www.blogjava.net/yanzhou/archive/2006/09/19/70535.html</guid><wfw:comment>http://www.blogjava.net/yanzhou/comments/70535.html</wfw:comment><comments>http://www.blogjava.net/yanzhou/archive/2006/09/19/70535.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanzhou/comments/commentRss/70535.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanzhou/services/trackbacks/70535.html</trackback:ping><description><![CDATA[　　这段时间经常看到有人问到web开发中怎么中文总是?号。原因其实很简单，因为大家大多用的是tomcat服务器，而tomcat服务器的默认编码为 iso-8859-1(西欧字符)。就是因为iso-8859-1(西欧字符)编码造成了我们经常看到？号。关于iso-8859-1(西欧字符)更多知识请看<a href="http://www.regexlab.com/zh/encoding.htm#un" name="main">《字节，字符和编码</a><a href="http://www.regexlab.com/zh/encoding.htm#un">》</a>这篇文章。<br /><br />方法一：最简单也是用的最多的方法。<br />&lt;%@ page language="java" pageEncoding="GBK" %&gt;<br />或者&lt;%@ page contenttype="text/html;charset=gbk";&gt;这里可以用gb2312或者gbk，只是gbk比gb2312支持跟多的字符。<br /><br />这个方法用于jsp页面中的中文显示。<br /><br />方法二：使用过滤器。<br />过滤器使用主要针对表单提交，插入数据库的数据都是？号。这也是应为tomcat不按request所指定的编码进行编码，还是自作主张的采用默认编码方式iso-8859-1编码。<br />编写一个SetCharacterEncodingFilter类。<br />import java.io.IOException;<br /><br />import javax.servlet.Filter;<br />import javax.servlet.FilterChain;<br />import javax.servlet.FilterConfig;<br />import javax.servlet.ServletException;<br />import javax.servlet.ServletRequest;<br />import javax.servlet.ServletResponse;<br /><br />public class SetCharacterEncodingFilter implements Filter {<br />protected String encoding = null;<br />protected FilterConfig filterConfig = null;<br />protected boolean ignore = true;<br /><br />public void init(FilterConfig filterConfig) throws ServletException {<br />this.filterConfig=filterConfig;<br />this.encoding=filterConfig.getInitParameter("encoding");<br />String value=filterConfig.getInitParameter("ignore");<br />if(value==null)<br />this.ignore=true;<br />else if(value.equalsIgnoreCase("true"))<br />this.ignore=true;<br />else<br />this.ignore=false;<br />}<br /><br />public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {<br />// TODO 自动生成方法存根<br />if (ignore || (request.getCharacterEncoding() == null)) {<br />String encoding = selectEncoding(request);<br />if (encoding != null)<br />request.setCharacterEncoding(encoding);<br />}<br />chain.doFilter(request, response);<br />}<br /><br />public void destroy() {<br />// TODO 自动生成方法存根<br />this.encoding = null;<br />this.filterConfig = null;<br />}<br /><br />protected String selectEncoding(ServletRequest request) {<br />return (this.encoding);<br />}<br />}<br /><br />然后再web.xml加上<br />&lt;!-- Set Character Encoding--&gt;<br />&lt;filter&gt;<br />&lt;filter-name&gt;Set Character Encoding&lt;/filter-name&gt;<br />&lt;filter-class&gt;com.struts.common.SetCharacterEncodingFilter&lt;/filter-class&gt;<br />&lt;init-param&gt;<br />&lt;param-name&gt;encoding&lt;/param-name&gt;<br />&lt;param-value&gt;UTF-8&lt;/param-value&gt;<br />&lt;/init-param&gt;<br />&lt;/filter&gt;<br /><br />&lt;filter-mapping&gt;<br />&lt;filter-name&gt;Set Character Encoding&lt;/filter-name&gt;<br />&lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />&lt;/filter-mapping&gt;<br />&lt;!-- Set Character Encoding--&gt;<br /><br />使用过滤器的好处很多，特别是项目之中。<br />而且在使用国际化时就更有用了，只要在页面指定&lt;%@ page language="java" pageEncoding="UTF-8" %&gt;，服务器就会根据本地Locale来显示正确的字符集。<br /><br />所以我特别推荐使用过滤器。<br /><br />方法三：修改tomcat的server.xml文件中URIEncoding。<br />&lt;Connector<br />debug="0"<br />acceptCount="100"<br />connectionTimeout="20000"<br />disableUploadTimeout="true"<br />port="80"<br />redirectPort="8443"<br />enableLookups="false"<br />minSpareThreads="25"<br />maxSpareThreads="75"<br />maxThreads="150"<br />maxPostSize="0"<br /><font color="#0000ff"><b>URIEncoding="GBK"</b></font><br />&gt;<br />&lt;/Connector&gt;<br />这个方法主要针对从url中获取字符串的问题。<br />在tomcat5.0及以上版本，post和get方法在处理编码时有所不同。如果你在url中获取中文就会出现？号。但在tomcat4.1版本没有问题，因为tomcat4.1的post和get方法在处理编码时是一样的。 <img src ="http://www.blogjava.net/yanzhou/aggbug/70535.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanzhou/" target="_blank">周游世界</a> 2006-09-19 15:09 <a href="http://www.blogjava.net/yanzhou/archive/2006/09/19/70535.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>