從請求與響應入手,這是經(jīng)過tomcat的兩個必經(jīng)之路;
頁面:
當頁面設定了編碼集(utf8)
請求A. 是post(傳遞的數(shù)據(jù)放在請求體中):
B.是get(此時服務端設置utf8編碼集不起作用,因為數(shù)據(jù)是經(jīng)過請求行,而之前是經(jīng)過請求體。)
服務器(web容器):
默認設置ISO-8859-1字符
服務端小程序(servlet)
此時工作空間為UT8
A.request.setCharacterEncoding("utf8");此時不會以ISO-8859-1生成字符,而是生成UTF8.所以不亂碼。
B.new String(request.getParmt("...").getBytes("ISO-8859-1"), "UTF8");此時生成UTF8字符
響應 1.response.setCharacterEncoding("UTF-8");只是設置web容器的字符集為utf8
2.response.setHeader(content-type,text/html;charset=utf8)不光告訴tomcat,還告訴瀏覽器字符集為utf8(縮寫代碼為:response.setContentType(“text-html;charset =utf8”)
響應下載:
a.除了讀寫文件之外.還是設置強制下載文件類型.
response.setHeader("Content-Disposition","attachement;filename ="+name)
b.這時將new String(getBytes("gbk"), "ISO-8859-1")此時name可以傳入a.了
c.拓展:設置瀏覽器解析文件類型:
response.setHeader("Content-Type",this.getServletContent.getMimeType("web-content下的某個文件夾”+name)(但這一步瀏覽器自動做)
最后注意編程時:不得響應字符流與字節(jié)流同時使用。會報web容器已經(jīng)用過getWriter()
瀏覽器:
1.此時瀏覽器默認的如果是gbk字符那么就會產(chǎn)生亂碼,因為底層字節(jié)是utf8的。
a.默認編碼集為gbk的會出現(xiàn)下載中文的文件名,不顯示文件名。
注意:瀏覽器有緩存資源的功能。業(yè)務場景:點擊更改驗證碼.此時請求servlet路徑不變。圖片不發(fā)生改變.解決方案是:使用請求行加參數(shù)。?time=new Date().getTime().