Java解決UTF-8 BOM問題

來源:互聯網
上載者:User

    也許很多人在用dom4j操作xml的時候遇到過這樣的問題“Content is not allowed in prolog”,以前我還真沒遇到過,因為用的一直是Sun的JDK1.6,但如果用1.5以前的版本包括1.5或者非Sun的JDK,也許會碰到這種訪問,用原始方式查看,比如命令列查看檔案,會發現在它的內容最前面加了幾個亂碼,正是因為這個亂碼導致xml無法解析,同樣,如果是做其它的操作,可能也會因為這個亂碼而導致異常,這其實是utf-8 BOM的問題,簡單的來說就是String的字元在寫入流的過程中採用的是utf-16的編碼寫入的,之所以採用utf-16是因為JVM在運行時採用的是utf-16,那是亂碼其實是標識當前的檔案編碼是utf的意思,很多文字編輯器都對其做了處理,所以如果在比如linux下的gedit或者window的UE,看到的內容是好好的,但是一但用程式操作,便看到了那個小亂碼,說白了,是對本文內容utf格式的一種標識導致了那個小亂碼的出現,其實那個標識對於utf8格式來說可有可無,所以既然知道是本文標識導致的問題,那麼解決也很解決,不要直接把文本String寫入到檔案中就好了,直接用byte寫入,所以如果是經常用OutputStream直接操作byte寫入檔案的話,是不會遇到這個問題的,但如果是用Writer類直接把String寫入檔案則會出現這個問題,例:

    BufferedWriter writer = new BufferedWriter(out);

    writer.write("Hello World");

    改成:

    OutputStream out = new FileOutputStream(file);

    out.write("Hello World".getBytes());

這個問題就解決了,與其很多網上說怎麼跳過那個小亂碼進行操作,不如直接不讓那個亂碼出現,這樣更直接,只是一個簡單的getBytes()便可以改變。

    這也反映出了一個小技巧,那就是讀檔案對其內容進行操作時,建議用Reader,寫檔案時建議用OutputStream,當然這個問題在Sun的JDK1.6已經解決了,用什麼也無所謂,如果大家關於這個問題還有什麼看法與建議,歡迎交流

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.