在現網代碼和配置文件里面,發現中文出現亂碼。一查發現這些文件是因為“編碼(Encoding)”為ANSI。
所以一時痛快地用 notepad++ 通過 “格式M” 選擇 “轉為UTF-8編碼格式” ,打包更新代碼。
然后悲劇了。web server response 的信息,莫名地少了幾位。再用vim打開,就發現響應信息頭部多了一串字符:<feff>
原來,
有些編輯器,比如M$ Windows的記事本,在創建UTF8編碼文件時會在頭部添加一個不可見字符。這個字符可以通過vim查看到,而且如果是一個php文件,php4、php5在解析時均會有輸出。
原來這個被稱作BOM(Byte Order Mark)的不可見字符,是Unicode用來標識內部編碼的排列方式的,在UTF-16、UTF-32編碼里它是必需的,而在UTF-8里是可選的。因 此,才會出現有的編輯器在文件頭部添加添加BOM、而有的語法解析器又不作處理的的混亂情況。
根據w3c里FAQ的建議,解決方法就是,刪無赦!
**************************
http://apps.hi.baidu.com/share/detail/35382688
BOM的UTF文本文件例子,可以用vi 杜撰幾個,相關命令如下:
#設置UTF-8編碼
:set fileencoding=utf-8
#添加BOM
:set bomb
#刪除BOM
:set nobomb
#查詢BOM
:set bomb?
如何檢測UTF-8編碼中的BOM呢?
shell> grep -I -r -l $'\xEF\xBB\xBF' /path
如何刪除UTF-8編碼中的BOM呢?
shell> grep -I -r -l $'\xEF\xBB\xBF' /path | xargs sed -i 's/^\xEF\xBB\xBF//g'
在選擇用 notepad++ 轉 utf-8 時,要選擇 “轉為UTF-8無BOM編碼格式”
http://7567567.blog.51cto.com/706378/641744