首頁>Club>
6
回覆列表
  • 1 # 使用者834195712159

    local StringHelper = {}

    --[[

    utf-8編碼規則

    單位元組 - 0起頭

    1位元組 0xxxxxxx 0 - 127

    多位元組 - 第一個位元組n個1加1個0起頭

    2 位元組 110xxxxx 192 - 223

    3 位元組 1110xxxx 224 - 239

    4 位元組 11110xxx 240 - 247

    可能有1-4個位元組

    --]]

    function StringHelper.GetBytes(char)

    if not char then

    return 0

    end

    local code = string.byte(char)

    if code < 127 then

    return 1

    elseif code <= 223 then

    return 2

    elseif code <= 239 then

    return 3

    elseif code <= 247 then

    return 4

    else

    -- 講道理不會走到這裡^_^

    return 0

    end

    end

    function StringHelper.Sub(str, startIndex, endIndex)

    local tempStr = str

    local byteStart = 1 -- string.sub擷取的開始位置

    local byteEnd = -1 -- string.sub擷取的結束位置

    local index = 0 -- 字元記數

    local bytes = 0 -- 字元的位元組記數

    startIndex = math.max(startIndex, 1)

    endIndex = endIndex or -1

    while string.len(tempStr) > 0 do

    if index == startIndex - 1 then

    byteStart = bytes+1;

    elseif index == endIndex then

    byteEnd = bytes;

    break;

    end

    bytes = bytes + StringHelper.GetBytes(tempStr)

    tempStr = string.sub(str, bytes+1)

    index = index + 1

    end

    return string.sub(str, byteStart, byteEnd)

    end

  • 中秋節和大豐收的關聯?
  • 同一棟房子,上層和下層之間如何做隔音效果好?