2012-01-25 16 views
3

私はLuaにマルチバイト文字列を持っています。Luaでマルチバイト文字列を分割する

​​

文字列を文字列テーブルに分割する方法を教えてください。

英語のテキストでは、このコードを使用できます。しかし、これはマルチバイトでは機能しません。スタートのために

local s = "foo bar 123" 
local words = {} 
for word in s:gmatch("%w+") do 
    table.insert(words, word) 
end 
+0

日本語で「言葉」の境界がありますか?あるいは、その文字列を個々の文字のテーブルに分割するだけでいいですか? – dasblinkenlight

+0

[ICU4Lua](https://github.com/duncanc/icu4lua/)を使用 – daurnimator

+0

ICUはUTF-16を使用せず、UTF-16を使用しています。 8。 –

答えて

4

。これから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

+0

広範なUnicodeライブラリが考えられますが、多くの場合、ヘビー級です。作者が実際に分割したいものは本当にはっきりしていないので、最良の方法が正確に何であるかを説明するのは少し難しいですが、多くの単純なutf-8タスクでは、 。 – snogglethorpe

5

を問うこの中で言及あなたが何をしたいのですか:あなたはスペースで分割することで十分ではない場合、非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では)です。

+0

これはきちんとしたトリックです。 – mlepage

2

それは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