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

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

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

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

    常用鏈接

    留言簿(19)

    隨筆檔案(115)

    文章檔案(4)

    新聞檔案(1)

    成員連接

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

      本文主要講述的是Dom4j在把Document保存到文件過程中出現的一個中文問題,本文跟《80前》一文一樣,以Spring項目無關,請“春迷”們自重、沒事勿擾,文中不足之處歡迎大家批評指教。
      Dom4j是一個比較優秀的java開源xml解析項目,支持DOM, SAX and JAXP.,并提供對XPath查詢語言的強大支持。因此,在EasyJF團隊的很多開源項目中,如EasyJWeb、EasyDBO等都是使用Dom4j來處理xml文件相關操作。
    ?
    1、從一個xml文件中載入一個Dom到內存
      FileInputStream in = new FileInputStream(new File(fileName));
      SAXReader reader = new SAXReader();
      doc = reader.read(in);
    2、把Dom中的數據寫入到xml文件中
      使用Dom4j,要把一個Dom中的數據寫入到文件非常簡單,API如下:
       public void write(Writer writer) throws IOException;
      因此,假如我們要把一個Document寫入到c:\test.xml文件中,可以簡單的使用下面的代碼即可:
    java.io.Writer wr= new java.io.FileWrite(filename);
      doc.write(wr);
    ?wr.close();//注意,必須要執行close()方法,才會實現真正的寫入
      
      這種用法也是Dom4j所推薦我們使用的非常簡單的方法。然而,當我們的dom中包含有中文字符數據的時候,這種方法寫入的xml文檔卻無法使直覺打開。會提示類似如下的錯誤:
       org.dom4j.DocumentException: invalid byte 1 of 1-byte UTF-8 sequence (0xb2) Nested exception: invalid byte 1 of 1-byte UTF-8 sequence (0xb2)
    ?at org.dom4j.io.SAXReader.read(SAXReader.java:484)
    ?at org.dom4j.io.SAXReader.read(SAXReader.java:343)
    ?at
      我們可以看生成的xml文件編碼,內容是utf-8的,但文件格式確是ANSI的,如下圖所示:

    ?
    原因分析
      由于FileWriter默認的輸出編碼是ANSI編碼,而Dom4j中的wirte方法提供的內容實際是以UTF-8保存的,因此造成了包括中文字符的XML文件無法正常閱讀。
    ?
    解決方法:
    ?  不能使用簡單的FileWriter,而應該是使用一個能指定具體輸出編碼的Writer,在JDK的io包中, OutputStreamWriter可以指定輸出編碼。
      正確的代碼如下:
    java.io.OutputStream out=new java.io.FileOutputStream(fileName);
    ???java.io.Writer wr=new java.io.OutputStreamWriter(out,"UTF-8");???
    ???doc.write(wr);???
    ???wr.close();
    ???out.close();
      簡化一下可以寫成下面的樣式:
       java.io.Writer wr=new java.io.OutputStreamWriter(new java.io.FileOutputStream(fileName),"UTF-8");???
    ???doc.write(wr);???
    ???wr.close();

    小結:
      由于大多數優秀的基礎性開源項目都是老外開發,他們不大可能在中文平臺下進行測試,用例數據也很少會使用中文平臺,因此,我們即使按照這些開源項目的通用說明文檔及用戶指南去操作,也會出現很多不可預知的錯誤。這也是為什么本人要參與組建開源團隊EasyJF,提倡搞國產開源,并開發一些基礎性的開源框架如EasyJWeb、EasyDBO的一個初衷。
      當然,這里提出的中文問題,算是一個還“沒來得及商量”以及要通過一些罕見的處理才能正確運行的中文問題。因此,同樣歸并到了“中文問題沒商量”系列中。
    (注:本文作者,EasyJF開源團隊 大峽,轉載請保留作者聲明!)
    posted on 2006-08-21 10:00 簡易java框架 閱讀(1424) 評論(1)  編輯  收藏

    FeedBack:
    # re: “中文問題沒商量”之Dom4j中的編碼問題  2007-09-28 11:00 同聲傳譯
    很好,很希望與貴公司建立一個很好的一個合作伙伴  回復  更多評論
      

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 91亚洲国产在人线播放午夜| 国产成人无码免费网站| 亚洲乱色熟女一区二区三区蜜臀| 99在线免费观看视频| 亚洲成在人线aⅴ免费毛片| 亚洲av高清在线观看一区二区| 久久久久国色av免费看| 四虎影院在线免费播放| 五月天网站亚洲小说| 亚洲av无码一区二区三区人妖 | 国产成人高清精品免费软件| 久久久精品国产亚洲成人满18免费网站 | 午夜时刻免费入口| 亚洲国产欧洲综合997久久| 国产一精品一av一免费爽爽 | 免费一级毛片在线播放视频免费观看永久 | 亚洲日韩在线观看| 亚洲欧美日韩中文高清www777| 日本一区二区三区免费高清在线| a毛片视频免费观看影院| 国产猛烈高潮尖叫视频免费| 亚洲欧美日韩一区二区三区在线| 久章草在线精品视频免费观看| 国产在线精品免费aaa片| 亚洲无线电影官网| 中国国语毛片免费观看视频| mm1313亚洲国产精品美女| 免费国产a理论片| 婷婷久久久亚洲欧洲日产国码AV | 亚洲中文无码亚洲人成影院| 99视频在线精品免费| 丁香婷婷亚洲六月综合色| 久久久久av无码免费网| 色拍自拍亚洲综合图区| a级毛片高清免费视频| 亚洲第一精品电影网| 亚洲综合免费视频| 亚洲伊人精品综合在合线| 18禁免费无码无遮挡不卡网站| 国产成人精品高清免费| 黄色短视频免费看|