Java开发网 |
注册 |
登录 |
帮助 |
搜索 |
排行榜 |
发帖统计
|
您没有登录 |
» Java开发网 » Java EE 综合讨论区
打印话题 寄给朋友 订阅主题 |
作者 | Tomcat 服务器下 JSP 页面中文问题及解决方法总结 |
chengbd
版主 发贴: 687 积分: 112 |
于 2004-06-21 10:56
Copyright 2003 BeanSoft Studio All rights reserved. http://www.whichian.com/ Tomcat 服务器下 JSP 页面中文问题及解决方法总结 目前, Tomcat 作为一种出色的开放源代码的 JSP 服务器,目前在 JSP 的开发过程中获得了广泛的应用. 但是作为一款英语国家公司开发的软件, 在中文环境下不可避免的会出现一些乱码问题. 这里就 Tomcat 4.0 和 Tomcat 4.1 下的常见中文问题及其解决方法做一个总结. 这些方法都已经在 中文版 Windows 98 + JDK 1.3.1 和 中文版 Windows 2000 + JDK 1.3.1 下通过了测试. 另外在 IBM 的网站上有一个网页 http://www-900.ibm.com/developerWorks/cn/java/jsp_dbcsz/index.shtml 也讨论了这个问题. 首先为了便于讨论, 这里首先列出了一些方便的工具方法, 便于我们的讨论. 这些方法如下所示: // 转换由表单读取的数据的内码到 GB2312 public String toChi(String input) { try { byte[] bytes = input.getBytes("ISO8859-1"); return new String(bytes); }catch(Exception ex) { } return null; } // 对给定字符进行 URL 编码 public String encode(String value) { if(isEmpty(value)) return ""; return java.net.URLEncoder.encode(value); } // 对给定字符进行 URL 解码 public String decode(String value) { if(isEmpty(value)) return ""; return java.net.URLDecoder.decode(value); } . 问题1. 浏览器中看到的 JSP 页面中的汉字怎么都成了 '?' ? 可能原因如下: 您的页面中没有指定页面的字符集为中文. 解决方法(适用于Tomcat 4.0 和 Tomcat 4.1)是在页面中添加如下代码: <%@ page contentType="text/html;charset=gb2312" %> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 问题2. 通过 POST 方法提交的表单的汉字都显示为乱码(在 Tomcat 4.0 下正常, Tomcat 4.1 下出现). 可能原因如下: POST 提交的字符串都是 ISO8859-1 编码的, 只要把它的字符集转换到中文就行了. 解决方法如下(适用于 Tomcat 4.1): // 单个的参数 String result = toChi(request.getParameter("parameterName")); // 多个参数 String values[] = request.getParameterValues(name); if(values != null) { for(int i = 0; i < values.length; i++) { values[i] = toChi(values[i]); } } 问题3. 通过 GET 方法提交的表单的汉字都显示为乱码(在 Tomcat 4.0 和 Tomcat 4.1 下都出现). 可能原因如下: GET 提交的字符串都是 ISO8859-1 编码的, 只要把它的字符集转换到中文就行了. 解决方法如下(适用于 Tomcat 4.1, Tomcat 4.0 下不能用于 page.jsp?username=中文): // 单个的参数 String result = toChi(request.getParameter("parameterName")); // 多个参数 String values[] = request.getParameterValues(name); if(values != null) { for(int i = 0; i < values.length; i++) { values[i] = toChi(values[i]); } } 问题4. Cookie 中不能写入汉字或者汉字无法正确显示. 可能原因如下: Tomcat 4.0 下自动把 Cookie 做了编码为 ISO8859-1 的存储, 而 Tomcat 4.1 下的 JSP 引擎不支持包含含有汉字的 Cookie. Tomcat 4.0 下的解决方法: // 根据 Cookie 名称得到请求中的 Cookie 值, 如果 Cookie 值是 null, 则返回 "" public String getCookieValue(HttpServletRequest request, String name) { Cookie[] cookies = request.getCookies(); if(cookies == null) return ""; for(int i = 0; i < cookies.length; i++) { Cookie cookie = cookies[i]; if(cookie.getName().equals(name)) { // 需要对 Cookie 中的汉字进行 URL 反编码, 适用版本: Tomcat 4.0 return decode(cookie.getValue()); } } // A cookie might not return a null value, may return a "" return ""; } Tomcat 4.1 下的解决方法: // 写入包含汉字 Cookie 的方法 response.addCookie(new Cookie("cookieName", encode("汉字"))); // 得到 Cookie 值的方法(同 Tomcat 4.0 的解决方法) public String getCookieValue(HttpServletRequest request, String name) { Cookie[] cookies = request.getCookies(); if(cookies == null) return ""; for(int i = 0; i < cookies.length; i++) { Cookie cookie = cookies[i]; if(cookie.getName().equals(name)) { // 需要对 Cookie 中的汉字进行 URL 反编码, 适用版本: Tomcat 4.0 return decode(cookie.getValue()); } } // A cookie might not return a null value, may return a "" return ""; } 问题5. 在 Tomcat 4.0 下 GET 请求(如: page.jsp?username=中文) 无法返回原来的值. 原因: 与 Tomcat 引擎有关, 不论是否转换内码, 均无法返回原来的值, 但是有一个替代方法, 如下: 将 URL 地址改变为 "page.jsp?username=" + encode("中文") 然后使用下列代码取回参数: // 单个的参数 String result = toChi(request.getParameter("parameterName")); 问题6. JavaBean 里使用 <jsp:setProperty id="propName" property="*" /> 出现中文问题. 暂时未提供解决方案. |
话题树型展开 |
人气 | 标题 | 作者 | 字数 | 发贴时间 |
4652 | Tomcat 服务器下 JSP 页面中文问题及解决方法总结 | chengbd | 3539 | 2004-06-21 10:56 |
已读帖子 新的帖子 被删除的帖子 |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |