eclipse 回复于:2002-08-18 10:35:14 | 另外,上面提到的“Servlet API 2.3 提供一个新的函数HttpServeletRequest.setCharacterEncoding ”说法,我试过,挺好用的,tomcat4.0.1。 方法是配置一个filter,对request进行过滤处理,过滤器如下: [code] 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.UnavailableException;
/** * <p>Title: 中文问题</p> * <p>Description: 中文问题</p> * <p>Copyright: Copyright (c) 2002 writeonce</p> * <p>Company: </p> * @author writeonce * @version 1.0 */
public class EncodingFilter implements Filter { protected String encoding = null; protected FilterConfig filterConfig = null; public void destroy() { this.encoding = null; this.filterConfig = null;
} public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // Select and set (if needed) the character encoding to be used String encoding = selectEncoding(request); if (encoding != null) { request.setCharacterEncoding(encoding); } // Pass control on to the next filter chain.doFilter(request, response); } public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig; this.encoding = filterConfig.getInitParameter("encoding"); } protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}
[/code]
|
eclipse 回复于:2002-08-18 10:35:48 | [这个贴子最后由writeonce在 2002/07/23 12:39pm 编辑]
同时,在web.xml中加入如下配置: [code] <filter> <filter-name>Set Character Encoding</filter-name> <filter-class>EncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>GBK</param-value> </init-param> </filter>
<filter-mapping> <filter-name>Set Character Encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> [/code]
|
qdwht 回复于:2002-11-14 15:27:08 | 非常感谢,可以用。 可是,虽然可以用,但启动tomcat时,却会出现一个错误。如下: [ERROR] Digester - -Parse Error at line 60 column 11: The content of element typ e "web-app" must match "(icon?,display-name?,description?,distributable?,context -param*,filter*,filter-mapping*,listener*,servlet*,servlet-mapping*,session-conf ig?,mime-mapping*,welcome-file-list?,error-page*,taglib*,resource-env-ref*,resou rce-ref*,security-constraint*,login-config?,security-role*,env-entry*,ejb-ref*,e jb-local-ref*)". <org.xml.sax.SAXParseException: The content of element type "we b-app" must match "(icon?,display-name?,description?,distributable?,context-para m*,filter*,filter-mapping*,listener*,servlet*,servlet-mapping*,session-config?,m ime-mapping*,welcome-file-list?,error-page*,taglib*,resource-env-ref*,resource-r ef*,security-constraint*,login-config?,security-role*,env-entry*,ejb-ref*,ejb-lo cal-ref*)".> 我已经是最新的http://java.sun.com/dtd/web-app_2_3.dtd 请问,为什么?
|
qdwht 回复于:2002-12-10 16:27:05 | 没有大侠能帮帮忙吗?
|
arren211314 回复于:2004-07-08 18:29:32 | 真实笨! [color=red:b31db82201]处理汉字有那么难吗?[/color:b31db82201]我是在日文操作系统下做的一套中文的管理系统。 注意jsp的输出content-type为utf-8,html 标记内容的头的content-type 也设定为utf-8。 1。servlet接收客户请求信息时,在调用getParameter()之前掉一次request.setCharacterEncoding("UTF-8");就可了。之后接收的信息可以直接存入SQLSERVER,不会出现乱码。 2。从数据库读出地汉字不用作任何转换,直接OUT.PRINTLN即可。 很简单吧。 用得着那么繁琐一大堆吗。 注意UTF-8可是国际编码。 :o :P :em11:
|
justui 回复于:2004-07-12 21:04:18 | 我也碰到类似问题,一开始用:
response.setContentType("text/html;charset=GB2312"); request.setCharacterEncoding("GB2312"); PrintWriter out = response.getWriter(); . . . //name是一个开始时外部url传入,后来由表单的Get,Post传入的参数,可为中文 String name = request.getParameter("name");
以上代码可正常显示表单GET,POST编码的数据,但对于自己手工形成的经编码后的中文参数,则不能正常显示,改成以下代码后一切显示正常。
response.setContentType("text/html;charset=GB2312"); request.setCharacterEncoding("ISO-8859-1"); PrintWriter out = response.getWriter(); . . . //name是一个开始时外部url传入,后来由表单的Get,Post传入的参数,可为中文 String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"GB2312");
//即可正常显示汉字
造成以上差异的原因在于:使用第一种编码,当手工输入url时,因还没有调用【request.setCharacterEncoding("GB2312");】,系统默认按"iso-8859-1"参数由java解释成单字节,故显示为问号及乱码,第二次经由表单的GET或POST编码,则已按照【request.setCharacterEncoding("GB2312");】设置后的"GB2312"解释,故又能正常显示。
第二种代码则统一按“iso-8859-1”接收,并统一转换成GB2312,故都可正常显示。
|
|