perldoc
页面上的length()告诉我,如果要在字节中查找Unicode字符串,应该使用bytes::length(EXPR)
,并且bytes页面也有相同的说明。use bytes;
$ascii = 'Lorem ipsum dolor sit amet';
$unicode = 'Lørëm ípsüm dölör sît åmét';
print "ASCII: " . length($ascii) . "\n";
print "ASCII bytes: " . bytes::length($ascii) . "\n";
print "Unicode: " . length($unicode) . "\n";
print "Unicode bytes: " . bytes::length($unicode) . "\n";
然而,这个脚本的输出与man手册不一致:
ASCII: 26
ASCII bytes: 26
Unicode: 35
Unicode bytes: 35
我认为length()和bytes::length()对于ASCII和Unicode字符串返回的结果相同。 我的编辑器默认设置为UTF-8编写文件,因此我认为Perl将整个脚本解释为Unicode - 这是否意味着length()会自动正确处理Unicode字符串? 编辑:请看我的评论;我的问题并不十分合理,因为在上面的示例中,length()没有正常工作 - 它显示Unicode字符串的字节数而不是字符数。我最初遇到这个问题是因为我需要在HTTP消息中设置Content-Length头(以字节为单位)。我已经阅读了有关Perl中的Unicode的内容,并期望必须进行一些繁琐的操作才能使事情正常运行,但是当length()恰好返回我所需的内容时,我感到困惑!请参见接受的答案,了解Perl中的
use utf8
、use bytes
和no bytes
的概述。