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