XML亂碼問題和encoding的理解這篇博客已經講的很明白了,總結一下讀取XML選取編碼方式的邏輯就是:
- 如果文擋有 BOM ,就定義了文件編碼,則採用此編碼;
- 如果沒有 BOM ,就查看文件頭 encoding 聲明的編碼,如聲明爲
<?xml version="1.0"
,則採用 GB2312 編碼;
encoding="GB2312"?> - 如果上述兩個都沒有,就默認採用 UTF-8 編碼。
需要補充的有:
- Linux如何查看文件編碼:
file -i config.xml
,結果示例config.xml: application/xml; charset=utf-8
,可知此文件的編碼是 UTF-8 。 - 爲什麼 ISO-8859-1 編碼的文件可以被 GBK 或 GB2312 編碼正確讀取呢?原因是 GBK 和 GB2312 專門用來表示漢字,是雙字節編碼,而英文字母編碼和 ISO-8859-1 一致(兼容 ISO-8859-1 編碼)。其中 GBK 編碼能夠用來同時表示繁體字和簡體字,而 GB2312 只能表示簡體字,GBK 是兼容 GB2312 編碼的。