是否已有一个模块提供Unicode
就绪printf
方法,该方法采用与内置printf
相同的参数,但其中pad和justify的宽度适用于{ {1}}数据?
示例:
Unicode
答案 0 :(得分:4)
如果你担心Unicode的宽度 - 包括东亚的东西,并结合字符和控制cocdes以及所有其他的 - 和printf
,那么正确的答案是你需要columns
方法来自Unicode::GCString CPAN模块。
use Unicode::GCString;
my $gcs = Unicode::GCString->new($str);
my $cols = $gcs->columns;
printf "%*s\n", $cols, $str;
其他示例包括获取字符串的字形长度:
use Unicode::GCString;
$gcs = Unicode::GCString->new($str);
my $count = $gcs->length;
这是通过字形反转字符串:
use Unicode::GCString;
$str = reverse Unicode::GCString->new($str);
这是通过字形访问子字符串:
use Unicode::GCString;
my $gcs = Unicode::GCString->new($str);
my $piece = $gcs->substr(5, 5);
我很抱歉这不在Perl核心中。爱好。
答案 1 :(得分:-3)
TR11指定的字符宽度的基本支持是通过Unicode::EastAsianWidth和Unicode::Property::XS提供的。应该可以在它们之上编写一个可行的printf替换,但我不知道完全合规需要什么。