protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //POST提交解決亂碼的方式 與GET方式不一樣的是請求new String(nameParam.getBytes("iso8859-1"), "UTF-8"); 響應是相同的 req.setCharacterEncoding("UTF-8"); resp.setContentType("text/html;charset=UTF-8"); String nameParam = req.getParameter("name");//很奇怪 form表單獲取的數據 亂碼 //通常狀況下,服務器默認的編碼是「iso8859-1」,因此咱們須要數據還原,而後再轉換成UTF-8的形式 //不容許我去轉呀 報錯---解決:修改tomcat的server.xml文件 添加 URIEncoding="UTF-8" useBodyEncodingForURI="true" 哈哈 完美解決 好累 //nameParam = new String(nameParam.getBytes("iso8859-1"), "UTF-8"); System.out.println("找到了:"+ nameParam);//第一次進來null 輸入店員姓名 點擊查詢 輸出???é??
具體三種方式解決:------------第三種完美解決 也正是你們不太熟悉的方法 不知看到此文後你的問題有沒有解決哪?html
方法一: get方式提交的參數編碼,只支持iso8859-1編碼。所以,若是裏面有中文。在後臺就須要轉換編碼,以下 String bname = request.getParameter("bname"); bname = new String(bname .getBytes("iso8859-1"),"utf-8"); 前提是你頁面編碼就是utf-8,若是是gbk,那上面那句代碼後面就改爲gbk。 But修改後個人問題仍沒解決,繼續。。。 方法二:在客戶端使用 URLEncoder.encode(「中文」,」UTF-8」)對中文參數進行編碼,在服務器端須要進行解碼this.setName(java.net.URLDecoder.decode(name, 「UTF-8」)); 比較麻煩! 方法三:修改tomcat的server.xml文件: <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" /> 在其中添加URIEncoding="UTF-8" useBodyEncodingForURI="true"這一句。我使用的tomcat8,以前沒有添加useBodyEncodingForURI="true",因此仍是亂碼,添加後問題解決!
固然 每次Servlet中總會有各類各樣的中文請求,爲了不在每一個Servlet種都添加request.setCharacterEncoding(「utf-8」)或者response.setCharacterEncoding(「utf-8」),爲此能夠考慮添加一箇中文過濾器 具體代碼以下:java
1.web.xmlweb
<filter> <filter-name>CharsetEncodingFilter</filter-name> <filter-class>com.pers.hoobey.filter.CharsetEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <!-- 指定字符編碼爲UTF-8 --> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharsetEncodingFilter</filter-name> <!-- 過濾全部的jsp頁面的請求 --> <url-pattern>*.jsp</url-pattern> </filter-mapping>
2.CharsetEncodingFiltertomcat
//採用filter統一處理字符集 public class CharsetEncodingFilter implements Filter { private String encodeString; @Override public void init(FilterConfig filterConfig) throws ServletException { // 從init-param中獲取param-name爲encoding參數的值 encodeString = filterConfig.getInitParameter("encoding"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("begin"); // 設置字符集 request.setCharacterEncoding(encodeString); // 繼續向下執行,若是還有其餘filter繼續調用其餘filter,沒有的話將消息發送給服務器或客戶端 chain.doFilter(request, response); System.out.println("end"); } @Override public void destroy() { } }