作者jjt (jet)
看板Perl
标题Re: [问题] 把中文字切出来
时间Fri Nov 23 10:19:33 2007
※ 引述《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)
1F:推 Dreamer77:thank you very much !!!! 11/23 16:09