私はLuaにマルチバイト文字列を持っています。Luaでマルチバイト文字列を分割する
文字列を文字列テーブルに分割する方法を教えてください。
英語のテキストでは、このコードを使用できます。しかし、これはマルチバイトでは機能しません。スタートのために
local s = "foo bar 123"
local words = {}
for word in s:gmatch("%w+") do
table.insert(words, word)
end
私はLuaにマルチバイト文字列を持っています。Luaでマルチバイト文字列を分割する
文字列を文字列テーブルに分割する方法を教えてください。
英語のテキストでは、このコードを使用できます。しかし、これはマルチバイトでは機能しません。スタートのために
local s = "foo bar 123"
local words = {}
for word in s:gmatch("%w+") do
table.insert(words, word)
end
。これからSO How to write a unicode symbol in luaを問う、ライブラリslnunicode
にRBerteigの答えの見所にはSO他の人が指摘したように、それは伝えるのは難しいですIs there any lua library that converts a string to bytes using utf8 encoding
広範なUnicodeライブラリが考えられますが、多くの場合、ヘビー級です。作者が実際に分割したいものは本当にはっきりしていないので、最良の方法が正確に何であるかを説明するのは少し難しいですが、多くの単純なutf-8タスクでは、 。 – snogglethorpe
を問うこの中で言及あなたが何をしたいのですか:あなたはスペースで分割することで十分ではない場合、非ASCII文字のために分割しますか?
あなただけの非ASCII文字のために、個々の文字の間で分割したい場合は、次のようなものがあればよい:
s = "oink barf 頑張っています"
for word in s:gmatch("[\33-\127\192-\255]+[\128-\191]*") do
print (word)
end
は生成します。
oink
barf
頑
張
っ
て
い
ま
す
ここにトリックはそのUTF-です図8に示すように、マルチバイト文字はそれぞれ、先頭の2ビットが11
に等しい「先頭バイト」(したがって、—に\192
があります。 aは小数)、その後に0またはそれ以上の「後続バイト」があり、上位2ビットは10
(\128
– \191
、Luaでは)です。
これはきちんとしたトリックです。 – mlepage
それはLuaの5.3では、UTF-8だ場合、あなたはこのようなutf8
libraryを使用することができます。
local s = "あいうえお"
local words = {}
for _, c in utf8.codes(s) do
table.insert(words, utf8.char(c))
end
日本語で「言葉」の境界がありますか?あるいは、その文字列を個々の文字のテーブルに分割するだけでいいですか? – dasblinkenlight
[ICU4Lua](https://github.com/duncanc/icu4lua/)を使用 – daurnimator
ICUはUTF-16を使用せず、UTF-16を使用しています。 8。 –