熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Tomcat服務器下JSP頁中文問題解決方法

2013-11-23 20:23:12  來源: Java開源技術 

  目前 Tomcat 作為一種出色的開放源代碼的 JSP 服務器目前在 JSP 的開發過程中獲得了廣泛的應用 但是作為一款英語國家公司開發的軟件 在中文環境下不可避免的會出現一些亂碼問題 這裡就 Tomcat 和 Tomcat 下的常見中文問題及其解決方法做一個總結 這些方法都已經在 中文版 Windows + JDK 和 中文版 Windows + JDK 下通過了測試
  
  首先為了便於討論 這裡首先列出了一些方便的工具方法 便於我們的討論 這些方法如下所示:
  
  // 轉換由表單讀取的數據的內碼到 GB
  public String toChi(String input) {
  try {
  byte[] bytes = inputgetBytes(ISO);
  return new String(bytes);
  }catch(Exception ex) {
  }
  return null;
  }
  
  // 對給定字符進行 URL 編碼
  public String encode(String value) {
  if(isEmpty(value)) return ;
  return URLEncoderencode(value);
  }
  
  // 對給定字符進行 URL 解碼
  public String decode(String value) {
  if(isEmpty(value)) return ;
  return URLDecoderdecode(value);
  }
  問題 浏覽器中看到的 JSP 頁面中的漢字怎麼都成了 ? ?
  可能原因如下: 您的頁面中沒有指定頁面的字符集為中文 解決方法(適用於Tomcat 和 Tomcat )是在頁面中添加如下代碼:
  <%@ page contentType=text/html;charset=gb %>
  <meta httpequiv=ContentType content=text/html; charset=gb>
  
  問題 通過 POST 方法提交的表單的漢字都顯示為亂碼(在 Tomcat 下正常 Tomcat 下出現)
  可能原因如下: POST 提交的字符串都是 ISO 編碼的 只要把它的字符集轉換到中文就行了 解決方法如下(適用於 Tomcat ):
  // 單個的參數
  String result = toChi(requestgetParameter(parameterName));
  // 多個參數
  String values[] = requestgetParametervalues(name);
  if(values != null) {
  for(int i = ; i < valueslength; i++) {
  values[i] = toChi(values[i]);
  }
  }
  
  問題 通過 GET 方法提交的表單的漢字都顯示為亂碼(在 Tomcat 和 Tomcat 下都出現)
  可能原因如下: GET 提交的字符串都是 ISO 編碼的 只要把它的字符集轉換到中文就行了 解決方法如下(適用於 Tomcat Tomcat 下不能用於 pagejsp?username=中文):
  // 單個的參數
  String result = toChi(requestgetParameter(parameterName));
  // 多個參數
  String values[] = requestgetParametervalues(name);
  if(values != null) {
  for(int i = ; i < valueslength; i++) {
  values[i] = toChi(values[i]);
  }
  }
  
  問題 Cookie 中不能寫入漢字或者漢字無法正確顯示
  可能原因如下: Tomcat 下自動把 Cookie 做了編碼為 ISO 的存儲 而 Tomcat 下的 JSP 引擎不支持包含含有漢字的 Cookie
  Tomcat 下的解決方法:
  // 根據 Cookie 名稱得到請求中的 Cookie 值 如果 Cookie 值是 null 則返回
  public String getCookievalue(HttpServletRequest request String name) {
  Cookie[] cookies = requestgetCookies();
  if(cookies == null) return ;
  for(int i = ; i < cookieslength; i++) {
  Cookie cookie = cookies[i];
  if(cookiegetName()equals(name)) {
  // 需要對 Cookie 中的漢字進行 URL 反編碼 適用版本: Tomcat
  return decode(cookiegetvalue());
  }
  }
  // A cookie might not return a null value may return a
  return ;
  }
  Tomcat 下的解決方法:
  // 寫入包含漢字 Cookie 的方法
  responseaddCookie(new Cookie(cookieName encode(漢字)));
  // 得到 Cookie 值的方法(同 Tomcat 的解決方法)
  public String getCookievalue(HttpServletRequest request String name) {
  Cookie[] cookies = requestgetCookies();
  if(cookies == null) return ;
  for(int i = ; i < cookieslength; i++) {
  Cookie cookie = cookies[i];
  if(cookiegetName()equals(name)) {
  // 需要對 Cookie 中的漢字進行 URL 反編碼 適用版本: Tomcat
  return decode(cookiegetvalue());
  }
  }
  // A cookie might not return a null value may return a
  return ;
  }
  
  問題 在 Tomcat 下 GET 請求(如: pagejsp?username=中文) 無法返回原來的值
  原因: 與 Tomcat 引擎有關 不論是否轉換內碼 均無法返回原來的值 但是有一個替代方法 如下:
  將 URL 地址改變為 pagejsp?username= + encode(中文)然後使用下列代碼取回參數:
  // 單個的參數
  String result = toChi(requestgetParameter(parameterName));
  
  問題 JavaBean 裡使用 <jsp:setProperty id=propName property=* /> 出現中文問題暫時未提供解決方案
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28419.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.