如何在Perl中找到Unicode字符串的长度?

前端之家收集整理的这篇文章主要介绍了如何在Perl中找到Unicode字符串的长度?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
length()的perldoc页面告诉我,我应该使用bytes :: length(EXPR)来查找一个以字节为单位的Unicode字符串,或者 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";

但是,此脚本的输出与该帮助页不一致:

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-Lenth标头(以字节为单位)的程序.我已经阅读了Perl中的Unicode,并期待着做一些让事情变得有效的东西,但是当length()返回完全是我需要的那个蝙蝠的时候,我感到困惑!有关使用utf8,使用字节和Perl中没有字节的概述,请参阅接受的答案.

解决方法

如果您的脚本以UTF-8编码,则请使用 utf8 pragma.另一方面,bytes pragma将强制字节语义的长度,即使字符串为UTF-8.两者都在目前的词汇范围内工作.
$ascii = 'Lorem ipsum dolor sit amet';
{
    use utf8;
    $unicode = 'Lørëm ípsüm dölör sît åmét';
}
$not_unicode = 'Lørëm ípsüm dölör sît åmét';

no bytes; # default,can be omitted
print "Character semantics:\n";

print "ASCII: ",length($ascii),"\n";
print "Unicode: ",length($unicode),"\n";
print "Not-Unicode: ",length($not_unicode),"\n";

print "----\n";

use bytes;
print "Byte semantics:\n";

print "ASCII: ","\n";

输出

Character semantics:
ASCII: 26
Unicode: 26
Not-Unicode: 35
----
Byte semantics:
ASCII: 26
Unicode: 35
Not-Unicode: 35

猜你在找的Perl相关文章