作者liyih ()
看板Perl
标题Re: [问题] 固定长度的中英文句字处理?
时间Tue Jun 29 10:23:28 2010
※ 引述《tumc (HIHIHI)》之铭言:
: 如果是一个句子里面混杂了big5及英文字,
: 如果要将句子控制在一个固定的长度,也就是多的部份要截掉
: ,但希望截的"乾净",也就是不希望发生中文字被截一半,造成奇怪的字出现
: 请问该如何做呢?
: ex:
: 若是要固定输出不能超过为5个中文字
: $s="这句有5个半" => "这句有5个"
: $s="这句是六个整" => "这句是六个"
: $s="最後是数字5" => "最後是数字"
use Encode;
sub cutString {
my ( $str, $max_length, $enc ) = @_;
$max_length = defined($max_length) ? $max_length : 48;
$enc = defined($enc) ? $enc : 'big5';
$str = decode( $enc, $str );
$str = substr( $str, 0, $max_length );
encode( $enc, $str );
}
my $s = "这句有5个半";
print cutString( $s, 5 ); => 如果 $s 是 big5
print cutString( $s, 5, 'utf-8' ); => 如果 $s 是 utf-8
这样我的输入、输出都是 bytes,而字串的操作都是用 characters 为单位。
建议您可以先厘清 characters 与 bytes 的差异,参考以下这个投影片
http://www.slideshare.net/Penfold/perl-and-unicode
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.114.64.133
※ 编辑: liyih 来自: 140.114.64.133 (06/29 10:25)
1F:推 tumc:这个做法好像中文字英文字都算是一个字... 06/30 15:58