隨筆 - 115  文章 - 481  trackbacks - 0
          <2006年8月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(19)

          隨筆檔案(115)

          文章檔案(4)

          新聞檔案(1)

          成員連接

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

            在軟件系統(tǒng)中,由于存在著各種各樣的字符編碼問(wèn)題,比如另我們非常頭痛的中文問(wèn)題。因此,現(xiàn)在趨向于使用UTF-8編碼作為軟件中通過(guò)編碼格式,從而可以避免大多數(shù)字符編碼的問(wèn)題。本文跟《80前》一文一樣,以Spring項(xiàng)目無(wú)關(guān),請(qǐng)“春迷”們自重、沒(méi)事勿擾,文中不足之處歡迎大家批評(píng)指教。

            在Java開(kāi)發(fā)中,我們經(jīng)常使用Ant來(lái)編譯及打包項(xiàng)目。默認(rèn)情況下Ant會(huì)去調(diào)用一個(gè)名為build.xml文件,文件中定義了相關(guān)的單元及任務(wù)等,可以根據(jù)用戶命令執(zhí)行相應(yīng)的任務(wù)單元。
            比如,在很多開(kāi)源項(xiàng)目如Spring、webwork、EasyJWeb、EasyDBO等,其根目錄下都有一個(gè)build.xml文件。
          在國(guó)外的開(kāi)源項(xiàng)目中,build.xml文件中的內(nèi)容全部是英文字符,因此build.xml使用普通的ANSI或UTF-8或GBK都沒(méi)問(wèn)題,也不會(huì)遇到字符編碼問(wèn)題。而對(duì)于國(guó)產(chǎn)的開(kāi)源項(xiàng)目EasyJWeb、EasyDBO來(lái)說(shuō),為了方便國(guó)內(nèi)的用戶,肯定在文件會(huì)包含一些中文說(shuō)明。而默認(rèn)情況下包括中文字符,格式為ANSI的build.xml文件是無(wú)法正確運(yùn)行的,這應(yīng)該跟本人所寫(xiě)的Dom4j的原因類似。
            此時(shí),我們需要把build.xml文件改成UTF-8格式,并指定xml文件的格式為utf-8。如下面是EasyJWeb開(kāi)源項(xiàng)目中build.xml文件的部分內(nèi)容:
          <?xml version="1.0" encoding="UTF-8"?>
          <project name="EasyJF" default="usage" basedir="." xmlns:artifact="urn:maven-artifact-ant">
          ?<property file="easyjfbuild.properties" />
          ?<!--目錄定義-->
          ?<property name="main.src.dir" value="${basedir}/src/main" />
          ?<property name="test.src.dir" value="${basedir}/src/test" />
          ?<property name="lib.dir" value="${basedir}/lib" />
          ?<property name="env.lib.dir" value="${lib.dir}/build/" />
          ?<property name="doc.dir" value="${basedir}/doc" />
          ?<property name="build.dir" value="${basedir}/build" />
          ?<property name="release.dir" value="${basedir}/release" />
          ?<property name="web.dir" value="${basedir}/webapps" />
          ?<property name="ide.dir" value="${basedir}/misc/ide" />
          ?<!--項(xiàng)目屬性-->
          ?<property name="project.provider.name" value="easyjf" />
          ?<property name="project.name" value="jweb" />
          ?<property name="project.author" value="?<property name="project.version" value="0.6" />
          ?<!--發(fā)布文件名-->
          ….
            這里的問(wèn)題是如何建一個(gè)UTF-8格式的build.xml文件。
          錯(cuò)誤的習(xí)慣:
            在通常情況下,我們習(xí)慣于使用windows下的記事本等工具直接編碼xml文件內(nèi)容,并另存為UTF-8格式,如下圖所示:
          ?
            這種方式建立的build.xml文件是不正確的,最讓人煩惱的是具有非常的不穩(wěn)定性。這個(gè)不穩(wěn)定性表現(xiàn)在一些系統(tǒng)下能正確使用,而一些系統(tǒng)下會(huì)出現(xiàn)類似如下的錯(cuò)誤:

            D:\EasyJF\wlhy\bin>build.bat
            Buildfile: ..\build.xml
            BUILD FAILED
            D:\EasyJF\wlhy\build.xml:1: 缺少文件根組件
            Total time: 0 seconds
            請(qǐng)按任意鍵繼續(xù). . .
          ?
            這個(gè)錯(cuò)誤也是EasyJF團(tuán)隊(duì)中的williamRaym在寫(xiě)EasyJWeb的build腳本時(shí)發(fā)現(xiàn)的,而且后來(lái)又很多網(wǎng)友反映類似的錯(cuò)誤,如當(dāng)前EasyJF下的iula 項(xiàng)目就存在這個(gè)問(wèn)題:
          http://www.easyjf.com/html/bbs/20060814/1208824819851986.htm
            (也許是我的機(jī)器容錯(cuò)性好,不會(huì)報(bào)錯(cuò),呵呵!)。
            
          正確的方法:
            前面說(shuō)了,用記事本建立UTF-8格式的xml文件是不正確的,經(jīng)過(guò)我們多次實(shí)踐,正確的方法之一是使用Eclipse來(lái)建這個(gè)xml文件,在建立工程的時(shí)候需要把整個(gè)工程的字符集設(shè)置成為UTF-8,然后直接建立一個(gè)build.xml文件,默認(rèn)情況下該文件以UTF-8的格式保存。
            這樣建立起來(lái)的腳本文件,使用Ant的時(shí)候,不管build.xml中包含什么中文字符,都能正常運(yùn)行。當(dāng)然,應(yīng)該還可以用其它的開(kāi)發(fā)工具建立UTF-8格式的文件,還請(qǐng)大家來(lái)試驗(yàn)。另外也可以用JAVA自己寫(xiě)一個(gè)小程序來(lái)把ANSI格式的文件轉(zhuǎn)成UTF-8文件,這樣也沒(méi)問(wèn)題。
          ?
          小結(jié):
            之所以很多開(kāi)源項(xiàng)目的build過(guò)程中不會(huì)存在問(wèn)題,是因?yàn)樗哪_本文件中沒(méi)有包含中文字符或其它字符。面在國(guó)產(chǎn)開(kāi)源項(xiàng)目中,由于存在中文注釋、說(shuō)明等,所以在建立build.xml文件的時(shí)候需要作一些特殊的處理,使用UTF-8格式的文件。當(dāng)然,本文還重點(diǎn)提出了兩種建立UTF-8文件的方法,其中用記事本是不穩(wěn)定的,錯(cuò)誤的;而用專業(yè)Java開(kāi)發(fā)工具或JDK建立的腳本才是正確、穩(wěn)定的。
          (注:本文作者,EasyJF開(kāi)源團(tuán)隊(duì) 大峽,轉(zhuǎn)載請(qǐng)保留作者聲明!)
          posted on 2006-08-21 11:44 簡(jiǎn)易java框架 閱讀(1668) 評(píng)論(4)  編輯  收藏

          FeedBack:
          # re: “中文問(wèn)題沒(méi)商量”之Ant中的中文問(wèn)題  2006-08-21 12:47 Robin's Java World
          這樣的問(wèn)題還用得了長(zhǎng)篇大論嗎???  回復(fù)  更多評(píng)論
            
          # re: “中文問(wèn)題沒(méi)商量”之Ant中的中文問(wèn)題  2006-08-21 14:37 李李
          即使是文本編輯器也很少見(jiàn)用記事本來(lái)寫(xiě)的,效率不高
          推薦高效的方法,用UltraEdit,F(xiàn)ile/文件-->Convert/轉(zhuǎn)換 這里你想怎么轉(zhuǎn)都可以  回復(fù)  更多評(píng)論
            
          # re: “中文問(wèn)題沒(méi)商量”之Ant中的中文問(wèn)題  2006-08-21 21:07 建議找本xml的入門(mén)讀物
          倒......
          在ant文件的xml注釋里搞個(gè)中文說(shuō)明也要來(lái)擺一擺........  回復(fù)  更多評(píng)論
            
          # re: “中文問(wèn)題沒(méi)商量”之Ant中的中文問(wèn)題  2009-01-06 11:33 去死吧大陸人
          @建議找本xml的入門(mén)讀物

          回文的死大陸人 都愛(ài)自以為很厲害
          人家po這篇關(guān)你屁事  回復(fù)  更多評(píng)論
            

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 丽水市| 牙克石市| 北碚区| 西峡县| 台中市| 仙居县| 尉犁县| 肃宁县| 江油市| 石渠县| 武威市| 团风县| 华阴市| 托克托县| 安庆市| 寿宁县| 嘉善县| 高雄市| 新竹县| 海南省| 东阳市| 桦甸市| 抚顺市| 清镇市| 舞阳县| 宜兰市| 都江堰市| 益阳市| 科技| 内乡县| 嘉义县| 醴陵市| 塔城市| 仪征市| 枝江市| 台中市| 广灵县| 军事| 鄂伦春自治旗| 锦屏县| 昭通市|