2

使用这些 Unicode 范围Unicode::GCStringcolumns返回打印列的数量,而mbswidth来自Text::CharWidth则不会。
他们的行为不同是因为他们使用不同的数据库吗?

#!/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;
    }
}
4

1 回答 1

1

Text::CharWidthwcwidth使用依赖于操作系统和当前语言环境的 C 库函数。Unicode::GCString使用sombok库。后者似乎定期更新到最新的 Unicode 版本,所以我认为它是准确的。

于 2013-05-05T20:41:31.363 回答