在打印声明中使用\x{..}或\N{U+..}在打印声明中有区别吗?对我来说,它们看起来像做同一件事的两种方式。那么有什么区别-如果有的话?
"\x{...}"并且"\N{U+...}"始终产生完全相同的字符串,意思"\x{...}" eq "\N{U+...}"将始终为true(对于相同的数字)。
但是,从5.12开始,"\N{U+...}"可以保证by创建的标量使用UTF8=1内部存储格式[1],而by创建的标量"\x{...}"则不受任何保证(并且实际上UTF8=0在可能的情况下使用该格式)。这意味着utf8::upgrade在将标量"\N{U+...}"传递给遭受Unicode错误的(内置或XS)函数之前,不需要在标量上调用它。[2]
简而言之,"\N{U+...}"在处理Unicode代码点时"\x{...}"更可能正确工作,而在处理字节时则更可能正确工作。
所述UTF8=0的8位字符的存储格式的支持绳构成,同时UTF8=1的32位或64位的字符存储格式支持字符串(取决于版本)。
这是指将两个相同的字符串视为不同的代码,因为一个字符串是使用UTF8=0格式存储的,而另一个是使用UTF8=1格式存储的。将语义分配给存储格式的代码是有问题的,因为Perl可以而且确实可以在两种格式之间自由转换字符串。
| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |