站長資訊網
        最全最豐富的資訊網站

        java中請求亂碼解決方法

        java中請求亂碼解決方法

        出現的問題:

        通過get請求向服務器發送請求時,如果請求參數為中文時,服務器端接受到的參數為亂碼。

        亂碼原因分析及解決辦法:

        1、關于解碼和編碼

        編碼:'中'→1110001

        解碼:1110001→'中'

        亂碼:編碼和解碼過程中使用了不同的字符集

        2、Web應用中字符編碼解碼的問題

        (1)請求過程:

        <1>GET請求

        瀏覽器端是以UTF-8進行編碼,所以在服務器端也應該以UTF-8進行解碼

        由于GET請求參數附著在URL地址后面,所以要統一的URL地址的解碼字符集。

        解決辦法:

        在tomcat配置文件server.xml中找到第一個connector加入如下屬性 URIEncoding=UTF-8

        <2>POST請求

        在獲取請求參數前執行:request.setCharacterEncoding("UTF-8");

        (2)響應過程

        (1)指定響應數據的編碼字符集

        (2)告訴瀏覽器響應數據應該使用什么字符集進行解碼

        <1>Tomcat服務器會自動根據“解碼字符集”設置“編碼字符集”

        <2>設置編碼字符集:告訴瀏覽器當前響應數據的內容類型:response.setContentType("text/html;charset=UTF-8");需要注意的是,需要在response.getWriter();之前設置,否則無效。

        建議:

        所有的過濾器都只對POST請求起作用,在jsp頁面中設置字符編碼方式,都只是對表單提交時的POST請求起作用,對GET請求不能起到設置其字符編碼的作用,

        在GET請求中使用的是默認的編碼方式,所以對GET請求,需要在server.xml文件中設置URIEncoding="UTF-8"然后重啟TOMCAT便可以實現解決中文亂碼問題,

        但是不建議在href超鏈接請求中傳達中文參數,也不建議在GET請求中傳遞中文參數。

        另外對傳遞的部分中文實現傳遞和接收時的統一的編碼方法在傳達參數時使用

        "reply.jsp?title="+java.net.URLEncoder.encode(keywords)

        然后在接收參數頁面使用keywords=new String(request.getParameter("keywords").getBytes("8859_1"));這種方式雖然暫時解決了中文亂碼問題,

        但是在后期的維護和部署到其他的服務器時可以仍會會出現中文亂碼了問題,所以不建議使用。

        對于Post請求,只需在Servlet或者jsp中寫入如下代碼就可以把解決從表單中傳入的中文亂碼問題

         request.setCharacterEncoding("utf-8");

        了解:

        而對于Get請求,因為請求參數會被附加到地址欄的URL之后,所以不能用上面的處理方法。應該這樣:

           String str=request.getQueryString();    //使用URLDecoder解碼字符串    String str1=java.net.URLDecoder.decode(str,"utf-8");    String[] paraStrings=str1.split("&");     //paraStrings[0]就是第一個參數,依次類推...    for(String paraString : paraStrings)    {          String[] nameValue=paraString.split("=");          //nameValue[0]就是表單的name,nameValue[1]就是表單name對應的值    }

        還有一種方法就是獲取請求參數之后對請求參數值重新編碼,也就是先將其轉換成字節數組,再將字節數組重新解碼成字符串。

          String str=request.getParameter("name");   byte[] bytes=str.getBytes("ISO-8859-1");   String name=new String(bytes,"utf-8");

        結論:傳遞中文參數時,最好使用POST請求來提交。不同服務器設置編碼方式可能不同,不同操作系統設置編碼方式也可能不同。

        推薦:java基礎教程

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 国产午夜精品一区二区三区| 99精品电影一区二区免费看| 国产午夜精品一区二区三区| 国产亚洲精品无码拍拍拍色欲| 日韩一区精品视频一区二区| 成人精品一区二区久久久| 久久99国产乱子伦精品免费| 老湿亚洲永久精品ww47香蕉图片| 精品视频第一页| 无码日韩精品一区二区免费 | 免费视频成人国产精品网站| 久久国产精品久久| 国产伦精品一区二区三区| 一级做a爰黑人又硬又粗免费看51社区国产精品视 | 国产福利91精品一区二区| 骚片AV蜜桃精品一区| 亚洲精品无码Av人在线观看国产| 久久精品国产精品亚洲人人| 国产精品自产拍在线18禁| 国产精品成人观看视频| 国产成人精品大尺度在线观看| 欧美高清在线精品一区| 久久亚洲精品视频| 欧美精品亚洲精品日韩1818| 国产精品亚洲专区在线观看| 97久久久精品综合88久久| 2022精品天堂在线视频| 99精品国产一区二区三区2021| 精品久久无码中文字幕| 乱精品一区字幕二区| 亚洲国产成人精品无码区在线观看| 中文字幕久久精品| 热re99久久6国产精品免费| 日韩国产精品无码一区二区三区| 久久永久免费人妻精品下载| 久久精品国产亚洲av高清漫画| 久久久久人妻一区精品色| 日本VA欧美VA精品发布| 欧美精品v欧洲精品| 国产精品视频二区不卡| 国内精品久久久久影院免费|