Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unicode 如何逐个字符遍历UFT16编码的字符串?_Unicode_Character_Iteration_Livecode - Fatal编程技术网

Unicode 如何逐个字符遍历UFT16编码的字符串?

Unicode 如何逐个字符遍历UFT16编码的字符串?,unicode,character,iteration,livecode,Unicode,Character,Iteration,Livecode,我有一个UFT16编码字符串UFT16字符串。它包含双字节字符。我想通过Unicode字符与Unicode字符进行交互。我知道块表达式是通过单字节字符工作的 一个例子 我们有以下字符串 abcαβɣ 我们希望遍历它,并将每个字符放在另一个容器中自己的一行上。在LiveCode中,有两种方法可以从UTF16字符串中获取字符。如果字符串显示在字段中,则可以执行以下操作 select char 3 of fld 1 如果字段中有俄语或波兰语文本,它将正确选择1个字符。然而,这个特性在Live

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

一个例子

我们有以下字符串

   abcαβɣ

我们希望遍历它,并将每个字符放在另一个容器中自己的一行上。

在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存储字节)。

通过“Unicode字符”,您指的是编码的UTF-16代码单元还是编码单元表示的解码的Unicode代码点?这有很大的不同。不,UTF-16不使用单字节编码单元。UTF-8可以。实际上,UTF8使用1到4字节码单位之间的任何代码。UTF16也有例外,这就是为什么LiveCode(很少)与UTF16不兼容。如果你接受我的答案或者告诉我为什么它对你没有帮助,那就太好了。我没有点击“接受”按钮的原因是它还不能正常工作,我没有弄清楚它到底是什么。我在这个问题上加了一个例子。