Perl Unicode 烹饪书:打印的 Unicode 列宽
℞ 34:打印的 Unicode 列宽
Perl 的 printf
、sprintf
和 format
都认为所有码点占用 1 个打印列宽,但许多码点实际上占用 0 或 2 个。如果您使用这些内置函数来对齐文本,可能会发现 Perl 对码点宽度的理解与您的预期不符。
Unicode::GCString 模块的 columns()
方法考虑了每个码点的宽度,并返回字符串将占用的列数。使用此方法来确定 Unicode 字符串的显示宽度。
为了说明归一化不会影响字符串的列数,我们打印出两种形式的字符串
# cpan -i Unicode::GCString
use Unicode::GCString;
use Unicode::Normalize;
my @words = qw/crème brûlée/;
@words = map { NFC($_), NFD($_) } @words;
for my $str (@words) {
my $gcs = Unicode::GCString->new($str);
my $cols = $gcs->columns;
my $pad = " " x (10 - $cols);
say str, $pad, " |";
}
… 以显示无论归一化如何,它都能正确填充
crème |
crème |
brûlée |
brûlée |
上一页:℞ 33:字符图形中的字符串长度
系列索引:标准前言
下一页:℞ 35:Unicode 排序
标签
反馈
这篇文章有什么问题?请通过在 GitHub 上打开问题或拉取请求来帮助我们。