原文地址http://www.freecls.com/a/2712/e
lua自帶的string庫計算字符串長度是以字節來算的,所以一個中文字一般會占用1-4個字節
string.len('測試abc')返回的不是5而是大于5,如果想要實現中文字占1個長度,則要引入lua-utf8庫
本人用的是centos7,可以直接敲如下命令就行
luarocks install luautf8
從控制臺可以看出,就是利用lua庫把lutf8lib.c編譯成動態庫lua-utf8.so放在/usr/lib64/lua/5.1目錄
當然也可以手動編譯,源碼下載地址https://github.com/starwing/luautf8
unzip luautf8-master.zip
cd luautf8-master
#編譯
gcc -O2 -fPIC -I/usr/include -c lutf8lib.c -o lutf8lib.o
#鏈接成動態庫
gcc -shared -o lua-utf8.so -L/usr/lib64/lua/5.1 lutf8lib.o
然后把lua-utf8.so拷貝到lua默認package.cpath指定的路徑,64位centos7拷貝到/usr/lib64/lua/5.1即可
使用例子
local utf8 = require 'lua-utf8'
local str_len = utf8.len('測試abc')
print(str_len)? ? ? --5
該庫的方法跟標準的string庫用法一樣,具體用法可以參考lua官網
utf8.byte
utf8.char
utf8.find
utf8.gmatch
utf8.gsub
utf8.len
utf8.lower
utf8.match
utf8.reverse
utf8.sub
utf8.upper
總結
1.lua的版本為5.1,運行環境centos7 64位
備注
1.覺得本文有幫助的小伙伴可以關注筆者
2.原文地址http://www.freecls.com/a/2712/e