servlet的xx方式傳值中文亂碼

    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() {
    }
}
相關文章
相關標籤/搜索