Lua處理UTF8字串

2021-10-01 15:12:47 字數 2295 閱讀 2257

專案裡遇到用string.sub擷取中文字串會擷取出來非空,但是無法展示的情況,進行utf字串處理後ok.

核心部分是utf字串的判斷:

-- utf-

8 字元處理

local function stringtotable

(s) local tb =--[

[ utf8的編碼規則:

1. 字元的第乙個位元組範圍: 0x00—0x7f(0

-127

),或者 0xc2—0xf4

(194

-244);

2. utf8 是相容 ascii 的,所以 0

~127 就和 ascii 完全一致

3.0xc0

,0xc1

,0xf5—0xff

(192

,193 和 245

-255

)不會出現在utf8編碼中

4.0x80—0xbf

(128

-191

)只會出現在第二個及隨後的編碼中(針對多位元組編碼,如漢字)]]

for utfchar in string.

gmatch

(s,"[%z\1-\127\194-\244][\128-\191]*")do

table.

insert

(tb, utfchar)

endreturn tb

end

逐字列印效果的實現可以借助於 生成的 stable

-- 引數index是列印字的索引

function class:

popstr

(index)

if index ==

1 then

_stable =

stringtotable()

endindex = index +

1if index <= #_stable then

local str =

""for i,

char in ipairs

(_stable)

doif i <= index then

ifchar

=="[" then

if _stable[i+

1] and _stable[i+1]

=="-" then

index = index+

2else

index = index+

7 end

endstr = str .

.char

else

break

endend

return str

endreturn false

end

補充strig.gmatch

string.gmatch()建立並返回乙個迭代器,可用於for語句中迭代的進行全域性查詢。

迭代器每執行一次返回乙個找到的字串,如果在模式串中用圓括號指定的匹配分組,

則返回值有多個分別對應各個匹配分組的捕獲結果。分組可以相互巢狀,捕獲結果返

的順序對應模式串中匹配分組的左圓括號出現的前後順序。如果你希望第乙個返回值

是匹配結果的完整字串,那麼請將整個模式串包含在一對圓括號內。

"") string.gmatch 全域性查詢子串,每個括號指定的乙個分組匹配(對應乙個分組捕獲,

在泛型for中增加乙個返回值)

與 string.match 不同,string.gmatch發現乙個完整匹配以後,會繼續向後查詢,

pattern =

//\s*href\s*=\s*\"?\'?([:\w\./@]+)\"?\'?\s*

for href in string.

gmatch

(strhtmlcode, pattern)

{我們解釋一下模式串 "\s*href\s*=\s*\"?\'?([:\w\./@]+)\"?\'?\s*"

\是轉義符

\s表示空白字元

\s*表示空白字元出現一次或多次

\"表示引號

( \轉義符的使用與普通字串相同 )

?表示出現一次或零次

\w表示字母和數字

\.表示.(因為.是特殊字元,所以需要\還原)

是乙個自定義的字元類,如[0-

9]匹配所有數字

+是修飾符表示前面的字元出現一次或多次

UTF 8字元處理

參考 utf 8格式位元組 4中情況分別是 1 乙個位元組 0 x,低7位為有效資料,內碼是0x0 0x7f 2 兩個位元組 110 xx 10yyyyyy,低5位 低6位為有效資料,內碼是0x80 0x7ff 3 三個位元組 1110 x 10yyyyyy 10zzzzzz,低4位 低6位 低6位...

UTF 8字串在lua中的字長問題

utf 8字串在lua中每個字元的字長是不一樣,中文,英文,其他字元。都有各自不同的字長,所以utf 8也叫作變長字元。規則如下 1.utf8字元是變長字元 2.字元長度有規律 utf 8字元規律 字串的首個byte表示了該utf8字元的長度 0 x 1 byte 110y x 192,2 byte...

PHP正確解析UTF 8字串

在 學習php mysql之 字元編碼篇 一 中介紹了unicode與utf 8的轉換關係,總結了乙個utf 8的編碼規則,根據這個編碼規則,寫乙個utf 8編碼的解析程式,以下是php的實現 view code 程式功能,str是中英文混合的utf 8編碼字串,將此字串根據utf 8的編碼規則正確...