[英]Splitting a multibyte string in Lua
我在Lua中有一个多字节字符串。
local s = "あいうえお"
如何获取字符串并将其拆分为字符串表?
在英文文本中,我可以使用这段代码。 但这不适用于多字节。
local s = "foo bar 123"
local words = {}
for word in s:gmatch("%w+") do
table.insert( words, word )
end
正如其他人所指出的那样,很难说出你想要做什么:你想在哪里拆分非ASCII字符,如果在空格处拆分是不够的?
如果您只想在非ASCII字符的单个字符之间进行拆分,则以下内容可能就足够了:
s = "oink barf 頑張っています"
for word in s:gmatch("[\33-\127\192-\255]+[\128-\191]*") do
print (word)
end
生产:
oink
barf
頑
張
っ
て
い
ま
す
这里的技巧是在UTF-8中,多字节字符每个都由一个“前导字节”组成,前两位等于11
(所以在Lua中记住\\192
- \\255
,Lua中的字符转义是十进制的),后跟零个或多个“尾随字节”,前两位等于10
(Lua中为\\128
- \\191
)。
一个开始...来自这个SO问题如何在lua中编写unicode符号 ,RBerteig的答案指向一个库slnunicode
在这个SO问题中也提到了是否有任何lua库使用utf8编码将字符串转换为字节
如果它是UTF-8,在Lua 5.3中,你可以像这样使用utf8
库 :
local s = "あいうえお"
local words = {}
for _, c in utf8.codes(s) do
table.insert(words, utf8.char(c))
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.