String xmla = StringFileToolkit.file2String(
new File(
"D:\\projects\\mailpost\\src\\a.xml"),
"UTF-8");
byte[] b = xmla.getBytes(
"UTF-8");
String xml =
new String(b,3,b.length-3,
"UTF-8");
Document doc1 = DocumentHelper.parseText(xml);
Element e1 = (Element)doc1.selectSingleNode(
"/ResponseData/Body/RetDesc");
Element e2 = (Element)doc1.selectSingleNode(
"/ResponseData/Head/RespID");
Element e3 = (Element)doc1.selectSingleNode(
"/ResponseData/Body/RetCode");
Element e4 = (Element)doc1.selectSingleNode(
"/ResponseData/Body/RetDesc");
什麼是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
編碼
。
參考資料: