lua尝试调用方法'len'(一个空值)

在我的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 --问题出现在这里
    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

所以据我理解,这个函数获取一个字符串并将其编码转换。有时它可以正常工作,但有时会出现以下错误:尝试调用方法'len'(一个空值)。有什么想法它会是什么,怎么解决它?

我试图删除s:len()或插入一个条件如if s!= nil then ... ,但也没有起作用。

点赞
用户3204551
用户3204551

如果 s 等于 nil,则返回 nil。

上面的代码拒绝了 nil 值。但是还有其他非字符串类型,因此需要加强检查:

如果 s 的类型不是 'string',则返回 nil
2019-04-25 20:01:56