【问题标题】:Lua : Incorrect string length for String with Special CharactersLua:带有特殊字符的字符串的字符串长度不正确
【发布时间】:2017-12-21 12:22:14
【问题描述】:

考虑以下两种情况:

local str1 = "abc"

str1:len 给出 3

local str2 = "£££"

str2:len 给出 6

谁能解释一下?

LuaJit 版本:5.1

【问题讨论】:

  • local str2len = #str2:gsub("[\128-\191]", "")

标签: string lua luajit


【解决方案1】:

Lua中字符串的长度是bytes的个数,而不是chars的个数。

要处理多字节字符集,您需要像 utf8 这样的库,它在 Lua 5.3 中可用。

【讨论】:

  • 我面临的问题是我需要支持一个长度为 80 的字符串。所以输入字符为 '£' 超出了 lua 的长度,但不是从用户的角度来看。
  • local function parse_string(str) local ret = "" local flag = true for i = 1, #str do local c = str:sub(i,i) local char = string.char(b2i .toint(c, "big", false, 1)) if char > "\127" then flag = not flag if(flag) then ret = ret .. char end else ret = ret .. char end end return ret end
  • @user1681485 如果用户对文本的“长度”有所了解,那将是字素和可见字符之间的空格。很难准确解释对您对其文本的内部表示的人为限制。
【解决方案2】:

找到了解决办法。

本地函数 parse_string(str)

   local ret = ""

   local flag = true

   for i = 1, #str do

             local c = str:sub(i,i)

             local char = string.char(b2i.toint(c, "big", false, 1))


             if char > "\127" then

             flag = not flag

             if(flag) then

                 ret = ret .. char

            end

         else

        ret = ret .. char

    end

结束

  return ret

结束

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    相关资源
    最近更新 更多