UTF-8文本文件头部出现乱码“锘*”的问题及解决方法
昨天發(fā)現(xiàn)一個ini配置文件,在某些機器上修改后程序無法識別的問題。DBinfo_old是修改后,DBinfo.ini是修改前。
同一份程序,可以正確識別DBinfo.ini中的DBAddress等內(nèi)容,但是不能識別DBinfo_old中的內(nèi)容。使用UltraEdit打開內(nèi)容也一樣。
但是使用UltraEdit的16進制查看功能,卻發(fā)現(xiàn)DBinfo_old的頭部多出了3個字節(jié):EF BB BF,而EF BB和BF 5B恰好表示锘字和縖字,其中5B是左方括號。
并且在Linux上也能看出兩者的不同:
最后想到應(yīng)該是DOM作祟,用UltraEdit的另存為功能驗證了一下,果然如此:
當把文件編碼選為UTF-8時,系統(tǒng)會自動在文件頭部添加上EF BB BF這三個字節(jié),而選為UTF-8 NO BOM時會自動去掉這三個字節(jié)。
附:
關(guān)于BOM是什么,引用zhangwei@lenovots.com一段話來解釋一下,以下是引文:
對比發(fā)現(xiàn)文本裝換程序?qū)е罗D(zhuǎn)換后的文本出現(xiàn)多于站位符,二進制表示為EF BB EF:
所謂的EF BB EF問題,其實是UTF-8文件的Unicode簽名BOM(Byte Order Mark)問題,在JSP和PHP開發(fā)中都經(jīng)常碰到。
BOM(Byte Order Mark),是UTF編碼方案里用于標識編碼的標準標記,在UTF-16里本來是FF FE,變成UTF-8就成了EF BB BF。這個標記是可選的,因為UTF8字節(jié)沒有順序,所以它可以被用來檢測一個字節(jié)流是否是UTF-8編碼的。微軟做這種檢測,但有些軟件不做這種檢測,而把它當作正常字符處理。
微軟在自己的UTF-8格式的文本文件之前加上了EF BB BF三個字節(jié), windows上面的notepad等程序就是根據(jù)這三個字節(jié)來確定一個文本文件是ASCII的還是UTF-8的,?然而這個只是微軟暗自作的標記,?其它平臺上并沒有對UTF-8文本文件做個這樣的標記。
(以上引自http://kms.lenovots.com/kb/article.php?id=3354)最后要注意一點,不同版本的UltraEdit,在點保存時的默認選項不同,版本15會默認選擇UTF-8(With BOM)而版本18則會默認選擇UTF-8 NO BOM。
總結(jié)
以上是生活随笔為你收集整理的UTF-8文本文件头部出现乱码“锘*”的问题及解决方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 看看那些退役后去特警部队的散打王者的地位
- 下一篇: 电脑怎么做u盘系统 制作U盘系统的步骤