<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 31  文章 - 2  trackbacks - 0
    ?

    1、編碼?
    ??????
    編碼比較常用的有: UTF-8 GBK GB2312 ISO-8859-1,除了 iso-8859-1之外的其它三個編碼都能很好的支持中文,但它們都兼容 ISO-8859-1的編碼(就是說無論編碼怎么改變,只要是 ISO-8859-1中的字符,永遠不會出現亂碼)。
    ?????
    這四種編碼中, GB2312是中國規定的漢字編碼,也可以說是簡體中文的字符集編碼;GBK GB2312的擴展 ,除了兼容GB2312外,它還能顯示繁體中文,還有日文的假名; UTF-8雖然也支持中文,但卻GB碼不兼容(編碼值不同)UTF-8使用的是可變長的 UNICODE編碼,編碼可能是 1 16進制(即 ISO-8859-1中的字符,其編碼也是相同的)也有可能是 2位或 3位的 16進制。 UTF-8的優點是:1CPU字節順序無關 , 可以在不同平臺之間交流。 2、容錯能力高 , 任何一個字節損壞后 , 最多只會導致一個編碼碼位損失 , 不會鏈鎖錯誤 ( GB碼錯一個字節就會整行亂碼 ),所以在國際化處理中基本都是建議使用 UTF-8作為編碼。

    2、文件的編碼
    ?????
    文件編碼最常使用的有兩種:ANSIUTF-8,光看名字估計你都可以猜到了,ANSI就是我們保存文件時使用的默認編碼,而UTF-8則需自己設置。對于編碼的改變,我使用的工具是NOTEPADECLIPSENOTEPAD使用最簡單,只要打開文件后在另存為中選擇相應的編碼就行了,而且它對編碼的支持非常好;而在ECLIPSE中,只要稍微設置一下就行了,打開首選項,然后選擇:常規->內容類型(ContentType),在右邊選中你想改變保存編碼的文件類型,然后在下方的缺省編碼中改變其值,最后點擊更新(UPDATE)按鈕即可。

    ?
    而在其它的編輯器中,默認保存的內容都是GB2312或者GBK(NOTEPAD中對應ANSI).而根據前面所說的UTF-8和GBK,GB2312等的編碼值是不同的這一點,可以知道,如果文件使用了UTF-8,那么字符編碼就必須使用UTF-8,否則編碼值的不同就可能造成亂碼。而這也就是為什么那么多的人使用了UTF-8編碼后還會產生亂碼的根本原因。(JS和JSP都是這個道理)
    3、JSP,STRUTS等的中文亂碼解決方案
    ?????其實解決的方法只有一個:

    ?request.setCharacterEncoding(encoding);

    ???方法只有一種,但處理方式就多種多樣了,初學者會在JSP頁面上直接使用,而有經驗的程序員會使用過濾器。而現在所要說的方法也是過濾器。這里以統一使用UTF-8作為編碼作為例子說明。具體過程就不多說了,網上有很多教程。偷懶一點的,到TOMCAT中復制就行了。在TOMCAT的目錄下的"webapps"jsp-examples"WEB-INF"classes"filters"找到SetCharacterEncodingFilter.java 這個類,放到你的程序中并配置好映射路徑。配置好后基本上你的亂碼問題就解決了。但要映射路徑中需要注意的就是不能使用 '*'

    ??<filter-mapping>
    ????
    <filter-name>Set?Character?Encoding</filter-name>
    ????
    <servlet-name>*</servlet-name>
    ??
    </filter-mapping>

    像上面這樣配置的話(可能也是網上大多教程的做法,想當年也是害苦了我),可能你只有JSP的亂碼解決了,要解決STRUTS的亂碼需要映射 *.do 或者 servletActionName。然后在初始化參數中設置encoding的值就行了。

    <init-param>
    ??????
    <param-name>encoding</param-name>
    ??????
    <param-value>UTF-8</param-value>
    </init-param>

    當然,最重要的是要記得根據前面所說的方法,改變你所使用的編輯器保存文件的編碼要與使用的字符編碼一致。
    而在JSP內容中,還是使用如網上教程所說的那種技倆,在所有頁面的頁首加入:

    <%@?page?language="java"?contentType="text/html;?charset=UTF-8"
    ????pageEncoding
    ="UTF-8"%>

    至此,相信JSP,ACTION都不太可能出現亂碼了。
    4、資源文件的亂碼解決方案
    ????? 資源文件誰都知道是國際化支持不可或缺的一部分,如果資源文件都出現亂碼了那還了得?其實資源文件的亂碼是很好解決的,其原因也是因為使用了UTF-8做為JSP編碼后,沒有相應地改變資源文件的文件編碼造成的,所以只要對資源文件保存的編碼進行更正后,亂碼問題也就解決了。當然,你的中文要使用 native2ascii 命令進行正確的轉換。
    5、調用JS時,JS內容亂碼的解決方案。
    ???? 其實JS的亂碼還是跟文件的編碼有關系的,如果JS中有中文的話,那JS文件保存的編碼就必須跟調用此JS的頁面編碼相同,否則,你的所有中文都要從JSP頁面傳給JS才會顯示正常。可以看出對于調用JS出現的亂碼是最容易解決的.

    6、AJAX提交數據亂碼,返回數據亂碼的解決方案

    ???? 萬變不離其宗,AJAX的亂碼問題自然跟編碼有關了,其實很多人跟我一樣想到了對文件編碼進行設置,并且在接數據時設置了requet的編碼,在返回的數據時設置了response的編碼一切都以為會很順利,可是這一切都是徒勞無功的,討厭的亂碼再一次出現在你眼前。在你試了N多種方法,包括JS自身的escape,unescape方法后,你發現亂碼仍然猖狂地出現在屏幕上。
    ??? 其實在試過這N多方法后,很多人都沒發現,解決的方法其實很簡單,而且其答案就在我們之前處理的JSP亂碼之中。讓我們先看一下AJAX的經典請求代碼

    xmlhttp.open(?"post",?url,?async?);
    xmlhttp.setRequestHeader(?"Content-Type",?"text/html"?);
    xmlhttp.send(?params?);

    通過前面的說明,不知道你現在看出端倪了沒有。不知道是受了網上教程的影響還是其它方面影響,setRequestHeader并是萬年不變的,也沒人想過去改它,而問題就正好出在這個地方。回想一個JSP頁面內容的編碼設置,其中有這么一節:

    contentType="text/html;?charset=UTF-8"

    現在知道問題了吧,所以我們要把第二句代碼改為:

    xmlhttp.setRequestHeader(?"Content-Type",?"text/html;charset=UTF-8"?);

    最后別忘了在返回數據時也設置上:

    response.setContentType(?"text/xml"?);
    response.setCharacterEncoding(?"UTF-8"?);

    如果要問為什么的話,其實我們可以把xmlhttp看成是一個臨時頁面,它由瀏覽器動態生成,主要作用是在后臺獲得請求的數據(可以看成是一個高級的iframe)。所以對于普通頁面設置的編碼,對它也要同樣設置。而在servlet中返回數據為什么要設置contentType和encoding其道理也是一樣的。眾所周知,jsp的最后形態就是servlet,而jsp頁首設置的那個內容其實也就是讓生成的servlet中生成這么兩句話:

    response.setContentType(?"text/html"?);
    response.setCharacterEncoding(?"UTF-8"?);

    而pageEncoding則是跟jvm說明了這個頁面的內容要使用什么編碼保存(這跟之后生成的CLASS有關系)。所以在servlet設置response的編碼也是理所當然的了。?

    response.setContentType("text/xml;charset=UTF-8");

    response.setHeader("Pragma",?? "no-cache");?? //HTTP?? 1.0??

    response.setDateHeader("Expires",?? 0);?? //prevents?? caching?? at?? the?? proxy?? server??

    PrintWriter out = response.getWriter();

    out.write(outXML);

    out.flush();

    out.close();

    OK!這樣向客戶端寫的數據中的中文也是UTF-8編碼了,客戶端js腳本獲取到request.responseXML也好,responseText也好,里面的數據都不會有亂碼了

    posted on 2007-11-01 13:02 緣來如此 閱讀(1979) 評論(0)  編輯  收藏 所屬分類: AJAX
    主站蜘蛛池模板: 国语成本人片免费av无码| 91免费国产视频| A级毛片内射免费视频| 精品亚洲国产成AV人片传媒| a级黄色毛片免费播放视频| 亚洲精品网站在线观看不卡无广告| 国产成人亚洲精品91专区高清| 国产男女猛烈无遮挡免费网站 | 亚洲精品国产成人99久久| 中国人免费观看高清在线观看二区 | 久久夜色精品国产嚕嚕亚洲av| 大妹子影视剧在线观看全集免费 | 亚洲成人中文字幕| 东方aⅴ免费观看久久av| 久久精品国产亚洲AV嫖农村妇女 | 免费精品久久久久久中文字幕| 免费国产美女爽到喷出水来视频| 特级aa**毛片免费观看| 亚洲色精品vr一区二区三区| 日韩精品无码专区免费播放| 亚洲日本国产精华液| 成人免费视频小说| 亚洲阿v天堂在线2017免费| 亚洲最大福利视频网站| 免费人成视频在线| fc2免费人成在线| 亚洲妇女水蜜桃av网网站| 在线视频免费国产成人| 国产免费福利体检区久久| 久久精品国产亚洲av麻豆小说 | 亚洲一级毛片免费在线观看| 最近2019中文字幕免费看最新| 国产亚洲视频在线播放大全| 国产亚洲成AV人片在线观黄桃 | free哆拍拍免费永久视频| 亚洲美女激情视频| 免费一级毛片在线播放不收费| 久久国产精品2020免费m3u8| 亚洲日韩国产二区无码| 亚洲国产精品人久久| 免费看男女下面日出水视频|