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

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

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

    在使用dom4j的時(shí)候發(fā)現(xiàn)有時(shí)會(huì)出現(xiàn)這樣一個(gè)問(wèn)題:無(wú)法以UTF-8編碼格式成功保存xml文件
    錯(cuò)誤信息:
    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();
            }
        }

    錯(cuò)誤原因:
    在上面的代碼中輸出使用的是FileWriter對(duì)象進(jìn)行文件的寫(xiě)入。這就是不能正確進(jìn)行文件編碼的原因所在,Java中由Writer類繼承下來(lái)的子類沒(méi)有提供編碼格式處理,所以dom4j也就無(wú)法對(duì)輸出的文件進(jìn)行正確的格式處理。這時(shí)候所保存的文件會(huì)以系統(tǒng)的默認(rèn)編碼對(duì)文件進(jìn)行保存,在中文版的windowJava的默認(rèn)的編碼為GBK,也就是說(shuō)雖然我們標(biāo)識(shí)了要將xml保存為utf-8格式,但實(shí)際上文件是以GBK格式來(lái)保存的,所以這也就是為什么我們使用GBKGB2312編碼來(lái)生成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對(duì)編碼并沒(méi)有進(jìn)行什么很復(fù)雜的處理,完全通過(guò) Java本身的功能來(lái)完成。所以我們?cè)谑褂?/span>dom4j生成xml文件時(shí)不應(yīng)該直接在構(gòu)建XMLWriter時(shí),為其賦一個(gè)Writer對(duì)象,而應(yīng)該通過(guò)一個(gè)OutputStream的子類對(duì)象來(lái)構(gòu)建。也就是說(shuō)在我們上面的代碼中,不應(yīng)該用FileWriter對(duì)象來(lái)構(gòu)建xml文檔,而應(yīng)該使用 FileOutputStream對(duì)象來(lái)構(gòu)建

    修改代碼:
    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) 評(píng)論(0)  編輯  收藏

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲国产成人AV在线播放| 特级做A爰片毛片免费69| 亚洲AV无码AV日韩AV网站| 国产精品99爱免费视频| 久久亚洲最大成人网4438| 亚洲成AV人片在线观看WWW| 亚洲成av人片天堂网老年人 | 2048亚洲精品国产| 午夜免费福利影院| 久久不见久久见免费影院| 99re在线这里只有精品免费| 中文在线免费观看| 男女男精品网站免费观看 | 成人黄页网站免费观看大全| 精品免费人成视频app| 91香焦国产线观看看免费| 国产精品免费看久久久| 日本三级在线观看免费| a级午夜毛片免费一区二区| 国产精品1024在线永久免费| www永久免费视频| 人体大胆做受免费视频| 性生大片视频免费观看一级| 无码色偷偷亚洲国内自拍| 亚洲国产欧美国产综合一区| 亚洲视频一区二区三区四区| 亚洲人成电影青青在线播放| 亚洲三级中文字幕| 亚洲人成人77777在线播放| 亚洲国产成a人v在线| 亚洲成aⅴ人在线观看| 亚洲国产模特在线播放| 亚洲人成综合在线播放| 精品亚洲456在线播放| 亚洲中文无码永久免费| 亚洲AV色无码乱码在线观看| 在线精品自拍亚洲第一区| 特级av毛片免费观看| 香蕉国产在线观看免费| 91免费福利视频| 亚洲视频在线观看免费|