UFT16 でエンコードされた string がありますtheUFT16string
。全角文字が含まれています。Unicode文字ごとにUnicode文字をやり取りしたいと思います。チャンク式が半角文字で動くのはわかりましたか?
例
次の文字列があります
abcαβɣ
それを反復して、各文字を別のコンテナの行に配置したいと考えています。
LiveCode では、UTF16 文字列から文字を取得する方法が 2 つあります。文字列がフィールドに表示されている場合は、次のことができます
select char 3 of fld 1
フィールドにロシア語またはポーランド語のテキストがある場合は、1 文字が正しく選択されます。ただし、この機能は LiveCode ではあまり開発されておらず、多くの中国語、日本語、アラビア語 (およびその他の) 言語では失敗します。したがって、今のところバイトを使用することをお勧めします。
select byte 5 to 6 of fld 1
後者は LiveCode の将来のバージョンとも互換性がありますが、前者は互換性がない可能性があります。
とにかく、文字列は変数に含まれています。つまり、文字列をバイトとして処理する必要があります (文字を使用できますが、この場合、データは変数にあるため、バイトと文字は同じ方法で処理されます)。変数を 2 ずつ、つまり一度に 1 文字ずつ繰り返すことができます。
repeat with x = 1 to number of bytes of theUFT16String step 2
put byte x to x+1 into myChar
// do something with myChar here, e.g. reverse the bytes?
put byte 2 of myChar & char 1 of myChar after myNewString
end repeat
// myNewString now contains the entire theUTF16String in reverse byte order.
(これを 4 行ではなく 3 行で行うこともできますが、この例では、バイトを var myChar に格納する行を追加しました)。