是否已有一个提供unicode ready printf方法的模块?

时间:2012-02-20 15:40:18

标签: perl unicode module printf

是否已有一个模块提供Unicode就绪printf方法,该方法采用与内置printf相同的参数,但其中pad和justify的宽度适用于{ {1}}数据?


示例:

Unicode

2 个答案:

答案 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::EastAsianWidthUnicode::Property::XS提供的。应该可以在它们之上编写一个可行的printf替换,但我不知道完全合规需要什么。