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