2019年3月13日 21:53:04html
今天遇到這樣的問題, 有關於Java的charset. 當jsp已設置charset及pageEncoding爲utf8後, 對應界面出現了中文在界面上變爲問號的狀況. 記錄一下解決辦法. windows
背景: servlet3.1+jsp+tomcat85+eclipsePhoton
現象: jsp設定了charset以及paeEncoding爲utf8後, 仍然中文變成問號, 查看頁面信息, page info顯示頁面text Encoding爲windows-1252, 瀏覽器控制檯顯示response對象的charset=ISO-8859-1, 因此至關於jsp頁面的charset設置沒有起做用.
線索: 幾經展轉, 發現問題在servlet上, servlet是有系統自動建立的, 每個自動建立的servlet類都帶有這麼一行: response.getWriter().append("Served at: ").append(request.getContextPath());
其中的getWriter()方法的說明以下: Returns a PrintWriter object thatcan send character text to the client.The PrintWriter uses the characterencoding returned by getCharacterEncoding.If the response's character encoding has not beens pecified as described in getCharacterEncoding(i.e., the method just returns the default value ISO-8859-1), getWriterupdates it to ISO-8859-1.
因此線索已經很清晰, 由於在servlet中調用了response的getWriter方法, 而getWriter方法會在response對象沒有被設置character encoding的話, getWriter會自動將其設置爲ISO-8859-1.
解決方案: 去掉這一行當然是解決辦法, 但還有另一種迎面而上的方式: 爲response手動設置character encoding, 在getWriter上一行, 加上response.setCharacterEncoding("UTF-8");
或response.setContentType("text/html;charset=utf-8");
便可解決瀏覽器
但問題雖然解決, 這只是一個問題點, 由這個點,帶來的是一個知識面的問題, 好比:tomcat