如何在Perl中找到Unicode字符串的长度?
发布时间:2020-12-15 21:59:34 所属栏目:大数据 来源:网络整理
导读: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(
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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |