Re: [問題] 固定長度的中英文句字處理?
※ 引述《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)
推
06/30 15:58, , 1F
06/30 15:58, 1F
討論串 (同標題文章)
Perl 近期熱門文章
PTT數位生活區 即時熱門文章