Windows平臺下Unicode文件(UTF-8等)頭部插入BOM首字符問題及處理方法
日前在使用IniEditor處理ini文件時,在Mac平臺上測試成功的代碼,挪至Windows平臺下老拋異常,沒法正確處理。最後跟蹤了一下源代碼,發現了問題所在。
問題:
在Windows下用文本編輯器建立的文本文件,若是選擇以UTF-8等Unicode格式保存,會在文件頭(第一個字符)加入一個BOM標識。更要命的是,該標識沒法經過使用trim()函數去掉。所以,若是咱們的Ini文件第一行就是section信息,如「[main]」。那麼在程序中讀取時,即在前面加入了一個BOM標識。這樣IniEditor在處理時將沒法把該行正確解析爲seciton。這就是挪至windows平臺下,程序老拋異常的緣由(拋的都是NoSuchSection的異常)。
處理辦法:
Java在讀取Unicode文件的時候,會統一把BOM變成「\uFEFF」。所以以下處理去掉BOM標識:
if(line.startsWith("\uFEFF")) {
line = line.replace("\uFEFF", "");
}
我就是在IniEditor的函數
public void load(InputStreamReader streamReader) throws IOException {}
中加入上述處理即工做正常。
IniEditor下載地址:http://grepcode.com/file/repository.jboss.org/nexus/