程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Tomcat 服務器下 JSP 頁面中文問題

Tomcat 服務器下 JSP 頁面中文問題

編輯:關於JAVA

目前, 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)是在頁面中添加如下代碼:

  問題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 裡使用 出現中文問題.

暫時未提供解決方案.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved