簡體   English   中英

為什么這兩種確定打印列數的方法表現不同?

[英]Why do these two methods to determine the number of print columns behave differently?

有了這些Unicode范圍的Unicode :: GCStringcolumns返回打印的列數,而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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM