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

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

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

    在使用dom4j的時候發現有時會出現這樣一個問題:無法以UTF-8編碼格式成功保存xml文件
    錯誤信息:
    Invalid byte 1 of 1-byte UTF-8 sequence. Nested exception: Invalid byte 1 of 1-byte UTF-8 sequence.
    。。。
    代碼:
    private void saveDocumentToFile() {
            
    try {
                OutputFormat format 
    = OutputFormat.createPrettyPrint();
                format.setEncoding(
    "UTF-8");
                XMLWriter writer 
    = new XMLWriter(new FileWriter(xmlFile), format);

                writer.write(document);
                writer.close();
            } 
    catch (Exception ex) {
                ex.printStackTrace();
            }
        }

    錯誤原因:
    在上面的代碼中輸出使用的是FileWriter對象進行文件的寫入。這就是不能正確進行文件編碼的原因所在,Java中由Writer類繼承下來的子類沒有提供編碼格式處理,所以dom4j也就無法對輸出的文件進行正確的格式處理。這時候所保存的文件會以系統的默認編碼對文件進行保存,在中文版的windowJava的默認的編碼為GBK,也就是說雖然我們標識了要將xml保存為utf-8格式,但實際上文件是以GBK格式來保存的,所以這也就是為什么我們使用GBKGB2312編碼來生成xml文件能正確的被解析,而以UTF-8格式生成的文件不能被xml解析器所解析的原因。

    dom4j的編碼處理:
    public XMLWriter(OutputStream out) throws UnsupportedEncodingException {

        
    //System.out.println("In OutputStream");

        
    this.format = DEFAULT_FORMAT;

        
    this.writer = createWriter(out, format.getEncoding());

        
    this.autoFlush = true;

       namespaceStack.push(Namespace.NO_NAMESPACE);

    }

    public XMLWriter(OutputStream out, OutputFormat format) throws UnsupportedEncodingException {

        
    //System.out.println("In OutputStream,OutputFormat");

        
    this.format = format;

        
    this.writer = createWriter(out, format.getEncoding());

        
    this.autoFlush = true;

       namespaceStack.push(Namespace.NO_NAMESPACE);

    }

    /**

    * Get an OutputStreamWriter, use preferred encoding.

    */

    protected Writer createWriter(OutputStream outStream, String

        encoding) 
    throws UnsupportedEncodingException {

        
    return new BufferedWriter(

            
    new OutputStreamWriter( outStream, encoding )

        );

    }

    so :
    dom4j對編碼并沒有進行什么很復雜的處理,完全通過 Java本身的功能來完成。所以我們在使用dom4j生成xml文件時不應該直接在構建XMLWriter時,為其賦一個Writer對象,而應該通過一個OutputStream的子類對象來構建。也就是說在我們上面的代碼中,不應該用FileWriter對象來構建xml文檔,而應該使用 FileOutputStream對象來構建

    修改代碼:
    private void saveDocumentToFile() {
            
    try {
                OutputFormat format 
    = OutputFormat.createPrettyPrint();
                format.setEncoding(
    "UTF-8");
                XMLWriter writer 
    = new XMLWriter(new FileOutputStream(xmlFile), format);

                writer.write(document);
                writer.close();
            } 
    catch (Exception ex) {
                ex.printStackTrace();
            }
        }











    posted on 2010-11-05 11:24 Ying-er 閱讀(235) 評論(0)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲激情视频网站| 亚洲国产日韩在线视频| 亚洲午夜在线播放| 黄页网站免费在线观看| 亚洲精品视频观看| 免费精品国产日韩热久久| 亚洲fuli在线观看| 破了亲妺妺的处免费视频国产| 日本亚洲免费无线码| 国产片免费福利片永久| 国产尤物在线视精品在亚洲| 亚洲美女在线国产| 成全在线观看免费观看大全 | 国产黄色片在线免费观看| 亚洲爆乳精品无码一区二区| 国产精品色午夜视频免费看| 人妻免费久久久久久久了| 亚洲国产婷婷六月丁香| 免费观看黄色的网站| 国产成人精品日本亚洲18图| 日本不卡高清中文字幕免费| 精品一区二区三区免费视频| 久久久久亚洲AV无码专区首| 亚洲人成网站免费播放| 理论秋霞在线看免费| 亚洲成Av人片乱码色午夜| 国产成人精品免费视频动漫| 亚洲a∨无码精品色午夜| 国产亚洲欧洲Aⅴ综合一区| 久久国产精品2020免费m3u8| 国产亚洲精aa在线看| 亚洲国产精品无码久久久久久曰| 中国性猛交xxxxx免费看| 亚洲精彩视频在线观看| 国产免费卡一卡三卡乱码| 国产免费拔擦拔擦8X高清在线人 | 亚洲暴爽av人人爽日日碰| 中文字幕不卡亚洲 | 久久亚洲AV无码精品色午夜麻豆| 无限动漫网在线观看免费| 一级毛片大全免费播放下载 |