Username: Password:

Tomcat服务器下JSP页中文问题解决方法
来源:linux宝库作者:linux宝库 发布时间:2007-09-30 00:00:00


  现在, Tomcat 作为一种出色的开放源代码的 JSP 服务器,现在在 JSP 的研发过程中获得了广泛的应用. 但是作为一款英语国家公司研发的软件, 在中文环境下不可避免的会出现一些乱码问题. 这里就 Tomcat 4.0 和 Tomcat 4.1 下的常见中文问题及其解决方法做一个总结. 这些方法都已在 中文版 Windows 98 + JDK 1.3.1 和 中文版 Windows 2000 + JDK 1.3.1 下通过了测试.

  首先为了便于讨论, 这里首先列出了一些方便的工具方法, 便于我们的讨论. 这些方法如下所示:

  // 转换由表单读取的数据的内码到 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" %>

  

  问题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 里使用 出现中文问题暂时未提供解决方案.

喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅