我的理解.chars是它返回"字形中字符串中的字符数".我的理解.ords是它返回"一个代码点数列表,一个用于字符串中每个字素的基本字符".也就是说,.chars返回字素数并.ords返回每个字素的一个代码点(基数).但是,我在MoakVM 2016.07上的Rakudo 2016.07.1中看到的行为似乎与以下内容不匹配:
> "\x[2764]\x[fe0e]".chars
1
> "\x[2764]\x[fe0e]".ords.fmt("U+%04x")
U+2764 U+fe0e
> "e\x[301]".ords.fmt("U+%04x")
U+00e9
> "0\x[301]".ords.fmt("U+%04x")
U+0030
Run Code Online (Sandbox Code Playgroud)
该.chars方法返回HEAVY BLACK HEART和VARIATION SELECTOR-15的预期1(文本表示❤︎而不是表情符号❤️,U + 2764 U + fe0f),但随后.ords返回两个代码点而不仅仅是基数(我预计只是U) 2764).更令人困惑的,如果你拨打.ords的拉丁小写字母E和组合重音符,你拿回U + 00e9(急性拉丁小写字母E).我期待U + 0065,因为LATIN SMALL LETTER E是基本代码点.当没有NFC版本的字符串时(例如U + 0030表示0),我确实得到了预期的结果.
是我的理解.chars和.ords公正有缺陷,或者这是一个错误?
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |