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

JSP中文亂碼問題的解決

編輯:關於JSP

字符內碼
每個國家(或區域)都規定了計算機信息交換用的字符編碼集,如美國的擴展ASCII碼、中國的GB2312-80、日本的 JIS 等,作為該國家(區域)信息處理的基礎,有著統一編碼的重要作用。由於各本地字符集代碼范圍重疊,相互間信息交換困難,軟件本地化版本獨立維護成本較高。因此有必要將本地化工作中的共性抽取出來,做一致性處理,將特殊的本地化處理內容降低到最少,這就是所謂的國際化(I18N)。各種語言信息被規范為本地信息,而底層字符集采用包含了所有字符的Unicode。

字符內碼(character code)指的是用來代表字符的內碼。我們在輸入和存儲文檔時都要使用內碼,內碼分為單字節內碼和雙字節內碼。單字節內碼的英文全稱是Single-Byte Character Sets (SBCS),可以支持256個字符編碼;雙字節內碼的英文全稱是Double-Byte Character Sets(DBCS),可以支持65000個字符編碼,主要用來對大字符集的東方文字進行編碼。

CodePage指的是一個經過挑選的以特定順序排列的字符內碼列表,對於早期的單字節內碼的語種,CodePage中的內碼順序使得系統可以按照此列表來根據鍵盤的輸入值給出一個對應的內碼。對於雙字節內碼,給出的是MultiByte到Unicode的對應表,這樣就可以把以Unicode形式存放的字符轉化為相應的字符內碼。引入對CodePage的支持主要是為了訪問多語種文件名,目前在NTFS和FAT32/VFAT下的文件系統上都使用Unicode,這需要系統在讀取這些文件名時動態地將其轉換為相應的語言編碼。

相信了解jsp(SUN企業級應用的首選)代碼的讀者對ISO8859-1一定不陌生,ISO8859-1是我們平時使用比較多的一個CodePage,它屬於西歐語系。GB2312-80 是在國內計算機漢字信息技術發展初始階段制訂的,其中包含了大部分常用的一、二級漢字和9區的符號。該字符集是幾乎所有的中文系統和國際化的軟件都支持的中文字符集,這也是最基本的中文字符集。

GBK 是 GB2312-80 的擴展,是向上兼容的。它包含了20902個漢字,其編碼范圍是 0x8140~0xFEFE,剔除高位 0x80 的字位,其所有字符都可以一對一映射到 Unicode 2.0,也就是說 Java 實際上提供了對 GBK 字符集的支持。

>GB18030-2000(GBK2K) 在 GBK 的基礎上進一步擴展了漢字,增加了藏、蒙等少數民族的文字。GBK2K 從根本上解決了字位不夠、字形不足的問題。


不同開發平台的區別
1.tomcat(一個很好用的JSP運行平台) 4開發平台

Windows 98/2000下的tomcat(一個很好用的JSP運行平台) 4以上版本都會出現中文問題(而在Linux下和tomcat(一個很好用的JSP運行平台) 3.x中則沒有問題),主要表現是頁面顯示亂碼。在IE中調整字符集為GB2312,就可以正常顯示了。

為解決這個問題,可在每個jsp(SUN企業級應用的首選)的頁面開始處加上<%@ page language=“Java” contentType=“text/html; charset=gb2312”%>。不過,這還不夠,雖然這時顯示了中文,但是發現從數據庫讀出的字段變成了亂碼。經過分析發現: 在數據庫中保存的中文字符是正常的,數據庫用ISO8859-1字符集存取數據,而Java程序在處理字符時默認采用統一的ISO8859-1字符集(這也體現了Java國際化思想),所以在數據添加的時候Java和數據庫都是以ISO8859-1方式處理,這樣不會出錯。但是在讀取數據的時候就出現問題了,因為數據讀出也采用ISO8859-1字符集,而 jsp(SUN企業級應用的首選)的文件頭中有語句<%@ page language=“Java” contentType=“text/html; charset=gb2312”%>,這說明頁面采用GB2312的字符集顯示,這樣就和讀出的數據不一樣。這時頁面顯示從數據庫中讀出的字符是亂碼,解決的方法是對這些字符轉碼,從ISO8859-1轉成GB2312,就可以正常顯示了。這個解決辦法對很多平台具有通用性,讀者可以靈活運用。

2.tomcat(一個很好用的JSP運行平台) 3.x、resin(一個免費的JSP運行平台)及Linux平台

在tomcat(一個很好用的JSP運行平台) 3.x、resin(一個免費的JSP運行平台)中或是在Linux下,沒有加入語句<%@ page language=“Java” contentType=“text/html; charset=gb2312”%>,而頁面中的<meta http-equiv=“Content-Type” content=“text/html; charset=gb2312”>語句起了作用,此時可以正常顯示。相反,如果加上<%@ page language=“java” contentType=“text/html; charset=gb2312”%>系統會報錯,說明tomcat(一個很好用的JSP運行平台) 4以上版本的引擎在處理jsp(SUN企業級應用的首選)時還是有差別的。

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