1. 程式人生 > >lua去掉字串中的UTF-8的BOM三個位元組

lua去掉字串中的UTF-8的BOM三個位元組

今天被坑了,原因是在lua中解析csv時,由於csv使用的是UTF-8 BOM格式,所以在解析csv成lua表時,表頭ID欄位,明明你列印的時候在表中存在,但是你去訪問v[‘ID’]的時候,始終為nil。原因就是ID是csv表的開頭欄位字串,BOM格式會預設增加三個不可見的位元組 0xEF 0xBB 0xBF,造成你以為的’ID’其實是’xxxID’ (xxx為不可見字元),訪問為nil就合乎情理了。

專案中lua從檔案中讀取字串內容時,並不知道檔案就是UTF-8 BOM格式,當然你可以規範都強制要求 UTF-8 無BOM的。當沒有規範的時候,只能想辦法做一下相容,去除BOM表頭

-- 檢測前三個位元組是否是 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 then
        ret=string.char( string.byte(ret,4,string.len(ret)) )
    end
    return ret;
end