javaEE亂碼問題

1.response對象:

向頁面輸出中文(亂碼問題)
                字節:ServletOutputStream getOutputStream()      字節輸出流
                     * 字節的輸出中文的亂碼
                     *     * 輸出哈羅我的是否亂碼呢?
                     *         * 不一定亂碼。
                     *     * 解決辦法
                     *         * 設置瀏覽器打開文件時所採用的編碼
                     *             response.setHeader("Content-Type", "text/html;charset=UTF-8");
                     *         * 獲取字符串byte數組時編碼和打開文件時編碼一致。
                     *             "哈羅我的".getBytes("UTF-8")
                    
                PrintWriter getWriter()                  字符輸出流
                
                     * 字符輸出中文是否亂碼呢?
                     *     * 肯定亂碼
                     *         response緩衝區的編碼,默認值ISO-8859-1
                     *     * 設置response緩衝編碼        
                     *         response.setCharacterEncoding("UTF-8");
                     *  * 設置瀏覽器打開文件所採用的編碼
                     *      response.setHeader("Content-Type", "text/html;charset=UTF-8");
                     *  * 簡寫方式
                     *      response.setContentType("text/html;charset=UTF-8");
                     
                     
                * 總結:response對象輸出中文,產生亂碼。
                    * 字節
                        * 解決方案
                            * 設置瀏覽器打開文件時採用的編碼
                                response.setHeader("Content-Type", "text/html;charset=UTF-8");
                                // 獲取字節輸出流
                                OutputStream os = response.getOutputStream();
                                // 輸出中文* 獲取字符串的byte數組採用的編碼
                                os.write("哈羅我的".getBytes("UTF-8"));
                    
                    * 字符
                        * 解決方法
                            * 設置瀏覽器打開文件時採用的編碼
                                response.setHeader("Content-Type", "text/html;charset=UTF-8");
                            * 設置response緩衝區的編碼
                                response.setCharacterEncoding("UTF-8");
                                
                        * 簡寫的方式(等於上面的兩句)
                            * response.setContentType("text/html;charset=UTF-8");

2.request對象

亂碼問題解決:
                * POST請求亂碼 :request.setCharacterEncoding("utf-8"); 
                
                * GET請求亂碼
                    解決方案一:修改tomcat/conf/server.xml 
                        <Connector port="80" protocol="HTTP/1.1" 
                                   connectionTimeout="20000" 
                                   redirectPort="8443" URIEncoding="utf-8"/>
                    * 必須有修改tomcat服務器配置文件權限
                    
                    解決方案二:逆向編解碼
                    username = URLEncoder.encode(username, "ISO8859-1");
                    username = URLDecoder.decode(username, "utf-8");
                    
                    解決方案三:簡寫的方式(推薦使用)
                    username = new String(username.getBytes("ISO-8859-1"),"utf-8");
                    
                * request獲取中文數據亂碼(總結:)
                    * post提交
                        * 設置request緩衝區的編碼
                            request.setCharacterEncoding("utf-8"); 
                    * get提交
                        * String構造方法
                            username = new String(username.getBytes("ISO-8859-1"),"utf-8");

3.文件上傳的亂碼問題

          關於文件上傳時的亂碼問題:
            1.上傳文件名稱亂碼
                ServletFileUpload.setHeaderEncoding("utf-8");                
            2.非上傳組件內容亂碼
                FileItem.getString("utf-8");
                
            3.上傳文件信息是否會亂碼,需要解決嗎?
                不需要解決,因爲我們在上傳時,使用的字節流來進行復制。

4.文件下載時的亂碼問題

        
            1.關於下載時中文名稱資源查找不到
                原因:<a href='${pageContext.request.contextPath}/download?filename=天空.mp3'>天空.mp3</a>
                  這是get請求。
                  
                  在服務器端:
                  String filename = request.getParameter("filename");
                  
                 解決: new String(filename.getBytes("iso8859-1"),"utf-8"); 
                 
            2.下載文件顯示時的中文亂碼問題
                    response.setHeader("content-disposition", "attachment;filename="+filename);
                    
                    IE:要求filename必須是utf-8碼
                    firefox:要求filename必須是base64編碼.
                    
                    問題:怎樣判斷瀏覽器?
                        String agent=request.getHeader("user-agent");
                    
                        if (agent.contains("MSIE")) {
                            // IE瀏覽器
                            filename = URLEncoder.encode(filename, "utf-8");
                            
                        } else if (agent.contains("Firefox")) {
                            // 火狐瀏覽器
                            BASE64Encoder base64Encoder = new BASE64Encoder();
                            filename = "=?utf-8?B?"
                                    + base64Encoder.encode(filename.getBytes("utf-8"))
                                    + "?=";
                        }else {
                            // 其它瀏覽器
                            filename = URLEncoder.encode(filename, "utf-8");
                        }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章