我有一个UFT16编码的字符串theUFT16string
。它包含双字节字符。我想通过Unicode字符来处理Unicode字符。我明白块表达式是由单字节字符工作的?
一个例子
我们有以下字符串
abcαβɣ
我们希望迭代它并将每个字符放在另一个容器中的一行上。
答案 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中的字节。)