Unicode 和 ASCII 运算符之间的区别

Posted

技术标签:

【中文标题】Unicode 和 ASCII 运算符之间的区别【英文标题】:A difference between Unicode and ASCII operators 【发布时间】:2019-08-29 09:15:02 【问题描述】:

我发现 Unicode 和 ASCII 运算符在引用插值时有时工作方式不同。

考虑一下:

$ perl6 -e'my $a = BagHash.new: <a a a a b b b c c c c c d>;for $a.keys -> $k  say "$k => $a<<$k>>" '

d => 1
b => 3
c => 5
a => 4

还有这个:

$ perl6 -e'my $a = BagHash.new: <a a a a b b b c c c c c d>;for $a.keys -> $k  say "$k => $a«$k»" '

c => c(5) a(4) b(3) d«c»
a => c(5) a(4) b(3) d«a»
b => c(5) a(4) b(3) d«b»
d => c(5) a(4) b(3) d«d»

但这即使在使用 Unicode 运算符时也有效:

$ perl6 -e'my $a = BagHash.new: <a a a a b b b c c c c c d>;for $a.keys -> $k  say "$k => $a«$k»" '
d => 1
b => 3
a => 4
c => 5

这是一个错误,还是有我看不到的解释?

【问题讨论】:

对我来说就像一个错误。 此外,我们目前将这些称为“Unicode”和“ASCII”运算符,afaik。 感谢@ElizabethMattijsen:s/UTF-8/Unicode/ Rakduo 这个问题的问题:2825 【参考方案1】:

似乎已使用 MasterDuke17 的 commit 2835 修复:

  sub bracket_ending($matches) 
      my $check     := $matches[+$matches - 1];
      my str $str   := $check.Str;
      my $last  := nqp::substr($str, nqp::chars($check) - 1, 1);
-     $last eq ')' || $last eq '' || $last eq ']' || $last eq '>'
+     $last eq ')' || $last eq '' || $last eq ']' || $last eq '>' || $last eq '»'
  

【讨论】:

以上是关于Unicode 和 ASCII 运算符之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

汉字编码与ASCII编码有何区别

关于unicode和ascii的区别

Unicode和Ascii的区别

如果 Ascii 运算符是可定义的,为啥不是 Unicode 符号?

ASCII,Unicode,GBK和UTF-8字符编码的区别联系

浅谈ASCII码unicode编码UTF-8编码的区别