gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:18:41 24 4
gpt4 key购买 nike

perldoc专页 length()告诉我应该使用 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

在我看来,对于 ASCII 和 Unicode 字符串,length() 和 bytes::length() 返回相同的值。我将我的编辑器设置为默认以 UTF-8 格式写入文件,所以我认为 Perl 正在将整个脚本解释为 Unicode——这是否意味着 length() 会自动正确处理 Unicode 字符串?

编辑:看我的评论;我的问题没有多大意义,因为 length() 在上面的例子中没有“正常”工作——它以字节而不是字符显示了 Unicode 字符串的长度。我最初偶然发现的原因是我需要在 HTTP 消息中设置 Content-Lenth header (以字节为单位)的程序。我已经阅读了 Perl 中的 Unicode 并期望必须做一些幻想才能使事情正常工作,但是当 length() 返回我所需要的东西时,我很困惑!有关 use utf8 的概述,请参阅已接受的答案, use bytes , 和 no bytes在 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: ", length($ascii), "\n";
print "Unicode: ", length($unicode), "\n";
print "Not-Unicode: ", length($not_unicode), "\n";

这输出:
Character semantics:
ASCII: 26
Unicode: 26
Not-Unicode: 35
----
Byte semantics:
ASCII: 26
Unicode: 35
Not-Unicode: 35

关于perl - 如何在 Perl 中找到 Unicode 字符串的长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1326539/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com