褰揂jax閬亣GBK缂栫爜 (瀹屽叏瑙e喅鏂规)

褰揂jax閬亣GBK缂栫爜 (瀹屽叏瑙e喅鏂规)

[鍘熸枃:  http://www.imxylz.info/wiki/Java/AjaxGBK ]
鏃╄捣鐨勫浗鍐呬簰鑱旂綉閮戒娇鐢℅BK缂栫爜锛屼箙涔嬶紝鎵�鏈夐」鐩兘浠BK鏉ョ紪鐮佷簡銆傚浜嶫2EE椤圭洰锛屼负浜嗗噺灏戠紪鐮佺殑骞叉壈閫氬父閮芥槸璁剧疆涓�涓紪鐮佺殑Filter锛屽己鍒跺皢Request/Response缂栫爜鏀逛负GBK銆備緥濡備竴涓猄pring鐨勫父瑙侀厤缃涓嬶細

<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>GBK</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

姣棤鐤戦棶锛岃繖鍦℅BK缂栫爜鐨勯〉闈㈣闂�佹彁浜ゆ暟鎹椂鏄病鏈変贡鐮侀棶棰樼殑銆備絾鏄亣鍒癆jax灏变笉涓�鏍蜂簡銆侫jax寮哄埗灏嗕腑鏂囧唴瀹硅繘琛孶TF-8缂栫爜锛岃繖鏍峰鑷磋繘鍏ュ悗绔悗浣跨敤GBK杩涜瑙g爜鏃跺彂鐢熶贡鐮併�傜綉涓婄殑鎵�璋撶殑缁堟瀬瑙e喅鏂规閮芥槸鎵贰鎴栬�呰繃浜庡鏉傦紝渚嬪涓嬮潰鐨勬枃绔狅細

  • GBK缂栫爜涓媕Query Ajax涓枃涔辩爜缁堟瀬鏆村姏瑙e喅鏂规
  • 鍏充簬AJAX-gbk(gb2312)涓枃涔辩爜鐨勮В鍐虫柟妗�
  • Ajax 涓璛mlHttp 涔辩爜 鐨勮В鍐虫柟娉� (UTF8,GB2312 缂栫爜 瑙g爜)

杩欐牱鐨勬枃绔犲緢澶氾紝鏄剧劧锛�

  • 浣跨敤VB杩涜UTF-8杞崲鎴怗BK鎻愪氦鏄畬鍏ㄤ笉鍙锛堝娴忚鍣ㄣ�佸骞冲彴瀹屽叏涓嶅彲鐢級
  • 浣跨敤澶嶆潅鐨刯s鍑芥暟杩涜涓�娆°�佸娆$紪鐮侊紝鍚庣杩涜涓�娆°�佸娆¤В鐮佷篃鏄笉闈犺氨鐨勶紝鎴愭湰澶珮锛屾棤娉曢噸澶嶄娇鐢�

濡傛灉鎻愪氦鏁版嵁鐨勬椂鍊欒兘澶熷憡璇夊悗绔紶杈撶殑缂栫爜淇℃伅鏄惁灏卞彲浠ラ伩鍏嶈繖绉嶉棶棰橈紵姣斿Ajax璇锋眰鍛婅瘔鍚庣鏄疷TF-8锛屽叾瀹冭姹傚憡璇夊悗绔槸GBK锛岃繖鏍峰悗绔垎鍒牴鎹寚瀹氱殑缂栫爜杩涜瑙g爜鏄笉鏄氨瑙e喅闂浜嗐��

鏈変袱涓棶棰橈細

  1. 濡備綍閫氳繃Ajax鍛婅瘔鍚庣鐨勭紪鐮侊紵Header杩囦簬澶嶆潅锛孋ookie鎴愭湰澶珮锛屼娇鐢ㄥ弬鏁版渶鏂逛究銆�
  2. 鍚庣浣曟椂杩涜瑙g爜锛熸瘡涓�涓姹傝繘琛岃В鐮侊紝杩囦簬绻佺悙锛涜幏鍙栧弬鏁版椂瑙g爜锛屾鏃跺凡缁忎贡鐮侊紱鍦‵ilter閲岄潰鍔ㄦ�佽缃紪鐮佹槸鏈�瀹屽杽鐨勬柟妗堛��
  3. 濡備綍浠庡弬鏁颁腑鑾峰彇缂栫爜锛熷鏋滄槸POST鐨刡ody鏄剧劧鏃犳硶鑾峰彇锛屽洜姝ゅ湪鑾峰彇涔嬪墠鎵�鏈夊弬鏁板氨宸茬粡鎸夌収鏌愮缂栫爜瑙g爜杩囦簡锛屾棤娉曡繕鍘熴�傛墍浠ラ�氳繃URL浼犻�掔紪鐮佹渶鏈夋晥銆傛敮鎸丟ET/POST锛屽悓鏃舵垚鏈緢浣庛��

瑙e喅浜嗕笂杩伴棶棰橈紝鏉ョ湅鍏蜂綋瀹炵幇鏂规銆� 鍒椾竴娈礘ava浠g爜锛�

import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.util.ClassUtils;
import org.springframework.web.filter.OncePerRequestFilter;

/** 鑷畾涔夌紪鐮佽繃婊ゅ櫒
 * @author imxylz (imxylz#gmail.com)
 * @sine 2011-6-9
 */
public class MutilCharacterEncodingFilter extends OncePerRequestFilter {

    static final Pattern inputPattern = Pattern.compile(".*_input_encode=([\\w-]+).*");

    static final Pattern outputPattern = Pattern.compile(".*_output_encode=([\\w-]+).*");

    // Determine whether the Servlet 2.4 HttpServletResponse.setCharacterEncoding(String)
    // method is available, for use in the "doFilterInternal" implementation.
    private final static boolean responseSetCharacterEncodingAvailable = ClassUtils.hasMethod(HttpServletResponse.class,
          "setCharacterEncoding", new Class[] { String.class });

    private String encoding;

    private boolean forceEncoding = false;

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
 throws ServletException, IOException {
        String url = request.getQueryString();
        Matcher m = null;
        if (url != null && (m = inputPattern.matcher(url)).matches()) {//杈撳叆缂栫爜
            String inputEncoding = m.group(1);
            request.setCharacterEncoding(inputEncoding);
            m = outputPattern.matcher(url);
            if (m.matches()) {//杈撳嚭缂栫爜
                response.setCharacterEncoding(m.group(1));
            } else {
                if (this.forceEncoding && responseSetCharacterEncodingAvailable) {
                    response.setCharacterEncoding(this.encoding);
                }
            }
        } else {
            if (this.encoding != null && (this.forceEncoding || request.getCharacterEncoding() == null)) {
                request.setCharacterEncoding(this.encoding);
                if (this.forceEncoding && responseSetCharacterEncodingAvailable) {
                    response.setCharacterEncoding(this.encoding);
                }
            }
        }
        filterChain.doFilter(request, response);
    }

    public void setEncoding(String encoding) {
        this.encoding = encoding;
    }

    public void setForceEncoding(boolean forceEncoding) {
        this.forceEncoding = forceEncoding;
    }
}

瑙i噴涓嬶細

  • 濡傛灉URL鐨凲ueryString涓寘鍚玙input_encode灏变娇鐢ㄦ缂栫爜杩涜璁剧疆Request缂栫爜锛屼互鍚庡弬鏁版寜鐓ф缂栫爜杩涜瑙f瀽锛屼緥濡傚鏋滄槸Ajax灏变紶鍏TF-8锛屽鏋滄槸鏅�氱殑GBK璇锋眰鍒欐棤瑙嗘鍙傛暟銆�
  • 濡傛灉鏃犺姝ゅ弬鏁帮紝鍒欐寜鐓eb.xml涓厤缃殑缂栫爜瑙勫垯杩涜鍙嶇紪鐮侊紝濡傛灉鏄疓BK灏辨寜鐓BK瑙勫垯瑙f瀽銆�
  • 瀵逛簬杈撳嚭缂栫爜鍚屾牱浣跨敤涓婅堪瑙勫垯銆傞渶瑕佽緭鍑虹紪鐮佷緷璧栬緭鍏ョ紪鐮侊紝涔熷氨鏄濡傛灉鏈変竴涓猒output_encode鐨勮緭鍑虹紪鐮侊紝鍒欏悓鏃堕渶瑕佹湁涓�涓猒input_encode缂栫爜鏉ユ寚瀹氳緭鍏ョ紪鐮併�傚綋鐒朵綘鍙互鏀归�犳垚涓嶄緷璧栬緭鍏ョ紪鐮併��
  • 瀹屽叏鍏煎Spring鐨刼rg.springframework.web.filter.CharacterEncodingFilter缂栫爜瑙勫垯锛屽彧闇�瑕佹浛鎹㈢被鍗冲彲銆�
  • 娌℃湁缁ф壙org.springframework.web.filter.CharacterEncodingFilter绫荤殑鍘熷洜鏄紝org.springframework.web.filter.CharacterEncodingFilter閲岄潰鐨別ncoding鍙傛暟鍜宖orceEncoding鍙傛暟鏄痯rivate锛屽瓙绫绘棤娉曚娇鐢ㄣ�傚湪鏈塤input_encode鑰屾棤_output_encode鐨勬椂鍊欐兂渚濈劧淇濇寔Spring鐨凴esponse瑙f瀽瑙勫垯鐨勮瘽鏃犳硶鍋氬埌锛屾墍浠ュ皢閲岄潰鐨勪唬鐮佹嫹璐濊繃鏉ヤ娇鐢ㄣ�傦紙涓轰簡灞曠ず鏂逛究锛屾敞閲婇兘鍒犳帀浜嗭級
  • 姝e垯琛ㄨ揪寮忓彲浠ユ敼杩涙垚鍙渶瑕佸尮閰嶄竴娆★紝浠庤�屽彲浠ユ彁楂樹竴鐐圭偣鏁堢巼銆�
  • 鎵�鏈夊悗绔姹傚皢鏃犺缂栫爜鐨勫瓨鍦紝鍓嶇Ajax鐨凣ET/POST璇锋眰涔熷皢鏃犺缂栫爜鐨勫瓨鍦紝鍙槸鍦║RL鍦板潃涓姞涓婁竴涓猒input_encode=UTF-8鐨勫弬鏁般�備粎姝よ�屽凡銆�
  • 濡傛灉鎯宠緭鍑虹殑缂栫爜涔熸槸UTF-8锛屾瘮濡傛墜鏈虹璇锋眰銆佽法绔欒姹傜瓑锛屽垯闇�瑕乁RL鍦板潃鍙傛暟_input_encode=UTF-8&_output_encode=UTF-8銆�
  • 瀵逛簬POST璇锋眰锛岀紪鐮佸弬鏁颁笉鑳藉啓鍦╞ody閲岄潰锛屽惁鍒欐棤娉曡В鏋愩��
  • 鏄剧劧锛岃繖绉嶇粓鏋佽В鍐虫柟妗堬紝鍦ㄤ换浣曠紪鐮佷腑閮藉彲浠ヨВ鍐筹紝GBK/UTF-8/ISO8859-1绛夌紪鐮佷换浣曠粍鍚堥兘鍙互瀹炵幇銆�
  • 鍞竴灞�闄愭�ф槸锛屾瑙e喅鏂规闄愬埗鍦↗2EE椤圭洰涓紝鍏跺畠骞冲彴涓嶇煡鏄惁鏈夌被浼糉ilter杩欐牱鐨勭粍浠惰兘澶熻缃紪鐮佺殑姒傚康銆�


©2009-2014 IMXYLZ
imxylz.com
| 姹傝搐鑻ユ复

你可能感兴趣的:(褰揂jax閬亣GBK缂栫爜 (瀹屽叏瑙e喅鏂规))