servlet規(guī)范要求:request的缺省編碼必須是iso-8859-1
發(fā)表時(shí)間:2024-06-17 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]看到很多文章在問和答關(guān)于java網(wǎng)頁漢字亂碼的情況,有些甚至認(rèn)為這是servlet包容器實(shí)現(xiàn)上的錯誤?墒侨绻x過servlet規(guī)格說明書,關(guān)于java網(wǎng)頁編碼的問題就應(yīng)該迎刃而解了。編寫java網(wǎng)頁(servlet\jsp),需要關(guān)心response(反饋給客戶端的頁面)和request(來自客...
看到很多文章在問和答關(guān)于java網(wǎng)頁漢字亂碼的情況,有些甚至認(rèn)為這是servlet包容器實(shí)現(xiàn)上的錯誤。
可是如果讀過servlet規(guī)格說明書,關(guān)于java網(wǎng)頁編碼的問題就應(yīng)該迎刃而解了。
編寫java網(wǎng)頁(servlet\jsp),需要關(guān)心response(反饋給客戶端的頁面)和request(來自客戶端的數(shù)據(jù))的編碼問題。
response的編碼可以直接用代碼實(shí)現(xiàn)。而request的編碼怎么辦呢?
以下是servlet規(guī)范書上的文字(我粗略翻譯一下吧,不怕見笑):
-- 整理自<Java Servlet Specification Version 2.3> SRV.4.9 --
當(dāng)前,很多瀏覽器并不發(fā)送帶有“Content-Type”頭信息的字符編碼限定符,而由讀取HTTP請求的代碼來決定字符的編碼方式。如果客戶端請求未定義編碼限定符,則包容器(如tomcat)用于創(chuàng)建request reader和分析POST數(shù)據(jù)的request的缺省編碼方式必須是“ISO-8859-1”。然而,為了向開發(fā)者指明客戶端沒有發(fā)送字符編碼信息的情況,包容器對getCharacterEncoding方法返回null。
如果客戶端不設(shè)置字符編碼方式,并且request不是按照以上缺省編碼方式(iso-8859-1)來編碼,則會發(fā)生問題。為了解決這個問題,在接口ServletRequest中加入了一個新的方法setCharacterEncoding(String enc)。開發(fā)者可以調(diào)用這個方法來替換包容器提供的缺省字符編碼方式。但是,必須在從request中分析任何POST數(shù)據(jù)或者讀取任何輸入之前,調(diào)用這個方法。一旦數(shù)據(jù)已被讀取,則調(diào)用這個方法將不會影響編碼方式。