Re: [問題] 把中文字切出來
※ 引述《Dreamer77 (追夢)》之銘言:
: 請問
: 要如何把中文一個字一個字切出來
: (輸入的可能是utf8 or big5 都有可能)
: p,s 前面提供的方法 split(//,$string)
: 我試了之後是 不僅連英文都變成一個字母一個字母@@"
: 而且 中文會有亂碼..
: 不知道有沒有人知道方法 thanks
1. regular exp
$lines="輸出的可能是utf8 or big5 都有可能";
my $big5 = "[\xA1-\xF9][\x40-\x7E\xA1-\xFE]";
my @words=$lines=~/($big5|\x0d\x0a|[\x21-\x7e]|\s+)/g;
2.decode<=>encode
#用以下的話 中文字length仍是 2
$lines=decode('big5',$lines);
@words=split //,$lines; #中文字算是一個字元,所以會被切開
map {$_=encode('big5',$_)} @words; #切回去之前的模式,中文字兩個字元
3.other
#用這招的話,中文字length會變成 1
use encoding 'big5', STDIN => 'big5', STDOUT => 'big5';
@words=split //,$lines;
用這三個方法,就可以隨意切換中文字的控制了
要看要處理的內容來看用哪種比較好,我這三種都用過,各有各的好處跟壞處
#英文如果不要一個字一個字切開 那就用第一條
my $big5 = "[\xA1-\xF9][\x40-\x7E\xA1-\xFE]";
my @words=$lines=~/($big5|\x0d\x0a|[\x21-\x7e]+ |\s+)/g;
~~~~~~多一個+
應該是這樣 我沒仔細去測試:p
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.197.133
※ 編輯: jjt 來自: 140.121.197.133 (11/23 10:21)
推
11/23 16:09, , 1F
11/23 16:09, 1F
討論串 (同標題文章)
Perl 近期熱門文章
PTT數位生活區 即時熱門文章