は2例下記考えてみましょう:のLua:文字列のために不正な文字列の長さが特殊文字を含む
local str1 = "abc"
str1:len
は
local str2 = "£££"
str2:len
誰かが説明でき
を与えていますこの?
LuaJitバージョン:5.1
は2例下記考えてみましょう:のLua:文字列のために不正な文字列の長さが特殊文字を含む
local str1 = "abc"
str1:len
は
local str2 = "£££"
str2:len
誰かが説明でき
を与えていますこの?
LuaJitバージョン:5.1
Luaの文字列の長さは、それにバイトの数ではなく、文字の数です。
マルチバイト文字セットを処理するには、utf8
のようなライブラリが必要です。これはLua 5.3で利用できます。
https://github.com/starwing/luautf8を試してください – lhf
私が直面する問題は、長さ80の文字列をサポートする必要があるということです。したがって、 '£'という文字を含む入力はluaあたりの長さを超えていますが、ユーザーからではありません視点。 – user1691485
I = 1のローカル関数parse_string(STR) ローカルRET = "" ローカルフラグ=真 に、#str ローカルC = STRを行う:サブ(I、I) ローカルチャー= string.char(B2I。オーバーライド:(C、 "大"、偽、1)) のchar> "\ 127" その後、 フラグ=ないフラグ (フラグ)の場合であれば、その後 RET = RET ...文字 エンド 他 のRET =のRET。 char end end return ret end – user1691485
解決策が見つかりました。
ローカル関数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
端
の最適化を歓迎します。 – user1691485
'ローカルstr2len =#STR2:GSUB( "[191 \ 128 \]"、 "" ) ' –