lua去掉字符串中的UTF-8的BOM三個字節


廢話不多說,還是先說點吧,項目中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')"

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM