使用这些Unicode范围Unicode::GCString的columns
会返回打印列的数量,而Text::CharWidth的mbswidth
则不会。
他们使用不同的数据库会有不同的行为吗?
#!/usr/bin/env perl
use warnings;
use strict;
use open qw(:std :utf8);
use Text::CharWidth qw(mbswidth); # 0.04
use Unicode::GCString; # 2012.10
for my $hex ( 0x0378 .. 0xd7ff, 0xfa2e .. 0xfdcf, 0xfdfe .. 0xfff8 ) {
my $chr = chr $hex;
if ( mbswidth( $chr ) == -1 ) { # -1 invalid data
my $gcs = Unicode::GCString->new( $chr );
my $width = $gcs->columns;
printf "%04x - %d : %s\n", $hex, $width, $chr;
}
}
答案 0 :(得分:1)
Text::CharWidth
使用C库函数wcwidth
,它取决于操作系统和当前语言环境。 Unicode::GCString
使用sombok库。后者似乎定期更新到最新的Unicode版本,所以我认为它是准确的。