Perl Unicode 美食大全:图形字符长度
℞ 33: 图形字符长度
如果你对 Unicode 没有学到其他东西,请记住这一点:字符不是字节,不是图形字符,不是码点。一个用户可见的符号(一个 图形字符)可能由多个 码点 组成。多个码点的组合可能产生相同的用户可见图形字符。
为了在心中清晰地区分所有这些实体,请小心并具体地考虑你在哪个层面上想要做什么。
作为一个具体的例子,字符串 brûlée
有六个图形字符,但最多有八个码点。现在假设你想获取它的长度。长度意味着什么?如果你的字符串被归一化为每个码点一个图形字符的形式,length()
是一样的,但是考虑
use Unicode::Normalize;
my $str = "brûlée";
say length $str;
say length NFD( $str );
通过图形字符计数来测量字符串的长度,而不是码点
my $str = "brûlée";
my $count = 0;
while ($str =~ /\X/g) { $count++ }
或者(在 Perl 的旧版本中),CPAN 模块 Unicode::GCString 很有用
use Unicode::GCString;
my $gcs = Unicode::GCString->new($str);
my $count = $gcs->length;
上一节: ℞ 32: 通过图形字符反转字符串
系列索引: 标准序言
标签
反馈
这篇文章有什么问题吗?请在 GitHub 上打开一个问题或拉取请求以帮助我们。