如何逐个字符地迭代UFT16编码的字符串?

时间:2013-04-20 05:15:02

标签: unicode character iteration livecode

我有一个UFT16编码的字符串theUFT16string。它包含双字节字符。我想通过Unicode字符来处理Unicode字符。我明白块表达式是由单字节字符工作的?

一个例子

我们有以下字符串

   abcαβɣ

我们希望迭代它并将每个字符放在另一个容器中的一行上。

1 个答案:

答案 0 :(得分:0)

在LiveCode中,有两种方法可以从UTF16字符串中获取字符。如果字符串显示在字段中,则可以执行

select char 3 of fld 1

如果您在该字段中有俄语或波兰语文本,它将正确选择1个字符。但是,此功能在LiveCode中的开发并不完善,并且会因许多中文,日文和阿拉伯语(以及其他)语言而失败。因此,最好现在使用字节:

select byte 5 to 6 of fld 1

后者也将与未来版本的LiveCode兼容,而前者可能不兼容。

无论如何,你的字符串在变量中,这意味着你必须将字符串作为字节处理(你可以使用字符,但在这种情况下,字节和字符以相同的方式处理,因为数据在变量)。您可以使用两个步骤遍历变量,即一次一个char:

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.

(您可以在3行而不是4行中执行此操作,但为了示例的目的,我添加了一行来存储var myChar中的字节。)