也許很多人在用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已經解決了,用什麼也無所謂,如果大家關於這個問題還有什麼看法與建議,歡迎交流