1. 程式人生 > >Java處理帶BOM頭的檔案小結

Java處理帶BOM頭的檔案小結

什麼是BOM

BOM(byte-order mark),即位元組順序標記,它是插入到以UTF-8、UTF16或UTF-32編碼Unicode檔案開頭的特殊標記,用來識別Unicode檔案的編碼型別。對於UTF-8來說,BOM並不是必須的,因為BOM用來標記多位元組編碼檔案的編碼型別和位元組順序(big-endian或little-endian)。 在絕大多數編輯器中都看不到BOM字元,因為它們能理解Unicode,去掉了讀取器看不到的題頭資訊。若要檢視某個Unicode檔案是否以BOM開頭,可以使用十六進位制編輯器。下表列出了不同編碼所對應的BOM。
BOM Encoding
EF BB BF UTF-8
FE FF UTF-16 (big-endian)
FF FE UTF-16 (little-endian)
00 00 FE FF UTF-32 (big-endian)
FF FE 00 00 UTF-32 (little-endian)

BOM的來歷

為了識別 Unicode 檔案,Microsoft 建議所有的 Unicode 檔案應該以 ZERO WIDTH NOBREAK SPACE(U+FEFF)字元開頭。這作為一個“特徵符”或“位元組順序標記(byte-order mark,BOM)”來識別檔案中使用的編碼和位元組順序。

不同的系統對BOM的支援

因為一些系統或程式不支援BOM,因此帶有BOM的Unicode檔案有時會帶來一些問題。 1.        JDK1.5以及之前的Reader都不能處理帶有BOM的UTF-8編碼的檔案,解析這種格式的xml檔案時,會丟擲異常:Content is not allowed in prolog. 2.        Linux/UNIX 並沒有使用 BOM,因為它會破壞現有的 ASCII 檔案的語法約定。 不同的編輯工具對BOM的處理也各不相同。使用Windows自帶的記事本將檔案儲存為UTF-8編碼的時候,記事本會自動在檔案開頭插入BOM(雖然BOM對UTF-8來說並不是必須的),但是editplus就不會這樣做。

BOM與XML

XML解析讀取XML文件時,W3C定義了3條規則: 1.        如果文件中有BOM,就定義了檔案編碼; 2.        如果文件中沒有BOM,就檢視XML宣告中的編碼屬性; 3.        如果上述兩者都沒有,就假定XML文件採用UTF-8編碼。

參考資料:

相關推薦

Java處理BOM檔案小結

什麼是BOM BOM(byte-order mark),即位元組順序標記,它是插入到以UTF-8、UTF16或UTF-32編碼Unicode檔案開頭的特殊標記,用來識別Unicode檔案的編碼型別。對於UTF-8來說,BOM並不是必須的,因為BOM用來標記多位元組編碼檔案的編碼型別和位元組順序(big-en

檢測根目錄bom資訊的檔案

新建bom.php檔案,複製以下程式碼儲存。然後把檔案放到根目錄下,在瀏覽器訪問檢測是否有帶bom頭資訊的檔案存在:http://你的域名/bom.php?auto=0 如果想清除的話,請訪問:http://你的域名/bom.php?auto=1 <?php //remove th

如何找出BOM的文字檔案

使用find命令和file命令: find . -type f -exec file {} \; | grep BOM 在bash shell中使用grep命令: grep -rlI $'^\x

JAVA輸出BOM的UTF-8編碼的檔案

當從http 的response輸出CSV檔案的時候,設定為utf8的時候預設是不帶bom的,但是windows的Excel是使用bom來確認utf8編碼的,所有需要把bom寫到檔案的開頭。微軟在 UTF-8 中使用 BOM 是因為這樣可以把 UTF-8 和 ASCII 等編

生成不BOM的UTF-8檔案

UTF-8(帶BOM):writer = New StreamWriter(FilePathName, True, System.Text.UTF8Encoding.UTF8) UTF-8(不帶BOM):writer =New StreamWriter(FilePathNa

json_decode 解析BOM文件錯誤

amp 文件 charset ascii true [1] color 字符 substr 1 //取前三個字符 並轉化為ASCII 判斷是否為BOM文件 2 3 $charset[1] = substr($result

ctags 處理系統標檔案

2010-11-18 周海漢 2010.11.16 http://abloz.com 問題提出: vim編寫程式時,不能跳轉到系統標頭檔案定義,不能自動完成自己編寫結構成員。需要解決。 ctags 在使用vim程式設計和

網路程式設計標檔案小結

網路程式設計的標頭檔案(這裡所有的標頭檔案都在/usr/include目錄下面) 經常被一些標頭檔案搞大,不知到到哪個標頭檔案去找結構。這裡做個總結。 ip頭部 有兩個ip頭部結構,分別是 linux/ip.h 下面結構名字struct iphdr netinet/i

java 10 生成標檔案(javah不是內部或外部命令)(java呼叫c)

在用java呼叫c的過程中,需要對java檔案生成對應的.h標頭檔案。 網上一些教程使用的方法(javah -jni 目標檔案)已經過時,這是因為java10已經移除了javah的相關功能。 為了使用java 10生成標頭檔案,在windows的cmd命令列中使用以下命令

java 去掉TXT文字檔案bom資訊

import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.File; import jav

關於接口返回BOM處理的問題

clas pre new highlight ret light csharp str pri   今天用RestClient框架做接口請求。結果請求回來的json轉模型失敗。提示JSON格式不正確。到BeJson網站驗證一下,發現果然不對。   後來得知是由於json信

去掉utf-8的Bom:使用java以及jdbc不使用第三方庫執行sql文件腳本

語句 \n path expect continue 參數 oid while figure package com.xxx.xxx.dao; import java.io.BufferedReader; import java.io.File; import java

shell 去除utf8檔案bom的方法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Java IO流中檔案處理以及查詢指定檔案的例項

檔案處理 1、 File:檔案和目錄(資料夾)路徑名的抽象變現形式(並不一定真實存在) 2、 構造方法:  a) File (String pathname) 根據一個路徑得到File物件  b) File(String parent, String child)根據一個目錄和一個子檔案/目

windows下通過javah.exe生成java類的.h標檔案

最近在研究JNI,需要製作java的.h標頭檔案。搞了一下發現AndroidStudio中的終端不好用,就用了windows上面安裝的jdk來製作,記錄一下方便後面檢視。 1.首先保證電腦上面的javah命令可以用,不行的話可以點選此連結:https://jingyan.baidu.com

Java中如何處理雙引號的字串

    Java中char是用' '單引號,字串用" "包起來即可。但是今天恰逢遇到要用Java執行js程式碼,因為兩種程式語言間格式的差異,讓我不得不處理字串中帶雙引號的問題。Python中有''' '''三引號,實現多行註釋,迫切希望Java中有一天能更新上此特性。話不多說,

spring MVC提交處理檔案和非檔案表單

<form action="" method="post" enctype="multipart-form-date"> <input type="file" name="file"/> <input type="user.userName"/&g

檔案和不.h的區別

所有C++標準庫的標頭檔案都是沒有.h結尾的。這麼做是為了區分,C標準庫的標頭檔案和C++標準庫的標頭檔案。比如最具代表性的: #include <string.h> // C 標準庫標頭檔案,包含 strlen,memset 等函式 #include <string>

關於java上傳到ftp檔案為空的處理筆記

這幾天用java上傳圖片到ftp,上傳成功,有資料夾,有名字,就是檔案大小為0,內容空,翻遍了網上大佬們的解決辦法,終於搞定了。 如下簡單快捷 需要在ftpClient.setFileType(FTP.BINARY_FILE_TYPE); 前面新增FTPClient.enterLo

bat批處理設定Java JDK系統環境變數檔案

自己修改第3行的Java安裝目錄就可以設定JAVA_HOME, classPath,追加到PATH的最前面 JAVA_HOME=C:\Program Files\Java\jdk1.6.0_10 classPath=%JAVA_HOME%\lib\tools.jar;%J