在我的lua项目中,我获得了以下功能:
function module.Cp1251ToUtf8(s)
if s == nil then return nil end
local r, b = ''
for i = 1, s and s:len() or 0 do --the problem occurs here
b = s:byte(i)
if b < 128 then
r = r..string.char(b)
else
if b > 239 then
r = r..'\209'..string.char(b - 112)
elseif b > 191 then
r = r..'\208'..string.char(b - 48)
elseif cp1251_decode[b] then
r = r..cp1251_decode[b]
else
r = r..'_'
end
end
end
return r
end
据我了解,此函数获取一个字符串并转换其编码。有时工作正常,但有时会出现以下错误:attempt to call method 'len' (a nil value)
。任何想法是什么以及如何解决?
我试图删除s:len()
或插入诸如if s != nil then ...
之类的条件,但是它也没有用。
答案 0 :(得分:3)
if s == nil then return nil end
以上拒绝零值。但是还有其他非字符串,因此请加紧检查:
if type(s) ~= 'string' return nil end