繁体   English   中英

在Lua中拆分多字节字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM