[英]Why do these two methods to determine the number of print columns behave differently?
有了這些Unicode范圍的Unicode :: GCString的columns
返回打印的列數,而mbswidth
從文本:: 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;
}
}
Text::CharWidth
使用C庫函數wcwidth
,具體取決於操作系統和當前語言環境。 Unicode::GCString
使用sombok庫。 后者似乎定期更新為最新的Unicode版本,因此我認為它是准確的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.