0

我有一个 UFT16 编码字符串theUFT16string。它包含双字节字符。我想通过 Unicode 字符对 Unicode 字符进行交互。我知道块表达式由单字节字符工作?

一个例子

我们有以下字符串

   abcαβɣ

我们想要遍历它并将每个字符放在另一个容器中的一行上。

4

1 回答 1

0

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

select char 3 of fld 1

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

select byte 5 to 6 of fld 1

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

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

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 中)。

于 2013-04-21T09:38:14.247 回答