gpt4 book ai didi

perl - 有没有办法让 printf/sprintf 正确处理字符组合?

转载 作者:行者123 更新时间:2023-12-05 00:23:12 26 4
gpt4 key购买 nike

组合字符在 printf 中似乎算作整个字符和 sprintf的计算:

[    é]
[ é]

上面的文本是由以下代码创建的:
#!/usr/bin/perl

use strict;
use warnings;

binmode STDOUT, ":utf8";

for my $s ("\x{e9}", "e\x{301}") {
printf "[%5s]\n", $s;
}

我希望代码打印:
[    é]
[ é]

我在函数描述中没有看到任何关于 Unicode 的讨论,更不用说组合字符了。是 printfsprintf面对Unicode没用?这只是 Perl 5.20.1 中可以修复的错误吗?有没有人写的替代品?

最佳答案

看起来答案是使用 Unicode::GCString

#!/usr/bin/perl

use strict;
use warnings;

use Unicode::GCString;

binmode STDOUT, ":utf8";

for my $s ("\x{e9}", "e\x{301}", "e\x{301}\x{302}") {
printf "[%s]\n", pad($s, 5);
}

sub pad {
my ($s, $length) = @_;
my $gcs = Unicode::GCString->new($s);
return((" " x ($length - $gcs->columns)) . $s);
}

关于perl - 有没有办法让 printf/sprintf 正确处理字符组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28546387/

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