Java編碼總結

來源:互聯網
上載者:User

Java 編碼問題總結
一、實踐原則
    1、分頁檔的儲存格式做到與聲明一致
        如聲明<%@ page language="java" pageEncoding="utf-8"%>,則該檔案儲存為utf-8格式
    2、無論是Get、Post還是JavaScript直接調用,瀏覽器以分頁檔指定的編碼格式提交請求
    3、JavaScript的方法如encodeURI、encodeURIComponent等使用utf-8格式編碼資料
二、Http協議和Servlet規範
    A、Http協議
        1、Get    根據Http協議,Get方法中的uri、queryString等均為iso-8859-1編碼格式
        2、Post    Post方法中可以使用其他的編碼格式,如utf-8,預設為iso-8859-1
    B、Servlet規範
        1、ServletRequest
            void setCharacterEncoding(String env);    該方法可以用於指定request body中資料的編碼格式,Container根據此格式解析
            註:該方法必須在取參數及擷取輸入資料流之前調用,否則無效,即getParamater(String key)和getReader()之前調用
        2、ServletResponse
            void setCharacterEncoding(String charset);該方法用於設定Container響應輸出資料流的編碼格式,但不指定響應內容格式,Servlet2.4+支援
            void setContentType(String type);該方法用於指定響應內容格式,同時可以指定響應輸出資料流格式,如下兩種情況基本等效,不同在於使用A時,瀏覽器將使用預設編碼,B將告訴瀏覽器使用指定編碼:
                A、setCharacterEncoding("utf-8");    setContentType("text/html");
                B、setContentType("text/html; charset=UTF-8");
            以上方法可以重複調用覆蓋以前設定,但應該在輸出之前,如調用getWriter();之前
三、伺服器狀況
    當前的不少伺服器對Servlet規範中 void setCharacterEncoding(String env);支援的不夠好,畢竟國外廠商本語是English,可能沒有實現該方法,即使調用了改方法,仍然使用預設的iso-8859-1解析
    個人測試了如下伺服器支援:
        A、Apache-Tomcat-5.5.12
        B、Apache-Tomcat-6.0.18
四、方案總結
    A、統一編碼方式,如使用utf-8,在伺服器端用指定的編碼格式解析資料(如果容器不支援,則手工轉碼),然後再指定輸出格式
    B、將要提交的英文以外格式的參數先進行轉碼再提交,如encodeURIComponent,伺服器端通過URIDecoder解碼(utf-8格式),處理完成後,或者指定輸出資料流及內容格式為utf-8,或者轉為gb2312,以iso-8859-1送回

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.