廢話不多說,還是先說點吧,項目中lua讀取的text文件如果有BOM,客戶端解析就會報錯,所以我看了看,任務編輯器swGameTaskEditor 在寫入文件的時候,也不知道為什么有的文件就是UTF-8BOM格式;但一般都是 UTF-8 無BOM的。
還是從lua改起來吧。搜了一搜,沒搜索到直接可以使用的代碼。
本來想用
string.gsub(mainString,findString,replaceString,num)
來替換\xEFBBBF為空。不過 \xEFBBBF 這種表示方法,lua貌似不認,會報錯,加上引號怎么就成了字符 EFBBBF了呢?
干脆找找 lua 是如何處理二進制文件的。
找了點資料,沒用二進制,還是用string本身的功能來實現的:
-- 檢測前三個字節是否是 EF BB BF 也就是BOM標記;如果是就去掉,只保留后面的字節。
function TryRemoveUtf8BOM(ret) if string.byte(ret,1)==239 and string.byte(ret,2)==187 and string.byte(ret,3)==191 ret=string.char( string.byte(ret,4,string.len(ret)) ) end return ret; end
這樣就好了。隨時都可以調用了。。。可以加上 print("ret="..ret);打印出來,並用 vim - 通過管道來讀取stdout,vim會顯示
<feff>
可以使用下面語句測試:
lua -e "print('aaaa'..string.char(239,187,191)..'with utf-8 BOM bytes in content')"