2

有没有更短的方法来剪切这个中文文本,使其适合$print_length宽度打印列?

#!/usr/bin/env perl
use warnings;
use 5.10.1;
use utf8;
binmode STDOUT, ':utf8';
use Unicode::GCString;

my $print_length = 15;

my $string1 = 'abcdefghijklmnopqrstuvwxyz';
say substr( $string1, 0, $print_length );

my $string2 = '大佛頂如來密因修證了義諸菩薩萬行首楞嚴經'; # don't know what that means
say fit_for_column( $string2 );

sub fit_for_column {
    my ( $string ) = @_;

    my $gcs = Unicode::GCString->new( $string ); 
    my $pcw = $gcs->columns();

    while ( $pcw > $print_length ) {
        $string =~ s/\X\z//;
        $gcs = Unicode::GCString->new( $string );
        $pcw = $gcs->columns();
    }
    return $string;
}
4

1 回答 1

1

对于像这样的小文本,我认为您无能为力。但是对于较长的文本,您可能需要查看East Asian Width,并使用它(可能压缩成代码点块而不是一个一个)作为文本中字符宽度的参考。你可以有一个函数,它接受一个字符串并返回它的宽度(假设标准 = 1、W = 2、H = 0.5 等)。或者返回设定长度内的文本。

于 2012-07-20T13:40:01.443 回答