作者jjt (新竹)
看板Perl
标题Re: [问题] 全型空格置换
时间Fri Oct 30 01:24:22 2009
※ 引述《xsinx (鲜菇)》之铭言:
: 文件内容大概是长这样的:
: 我(I) 有(Have) 一只(A) 狗(Dog) .
: 想要将文件里的所有全型空格置换成半型空格
: 再做其他的处理
: 我的写法是先读进这个档案并存至@line
: 如下
: foreach $line (@line)
: {
: $line =~ s/ / /g;
: ...
: ...
: }
: 可执行後却好像完全忽略掉这一行
: 都没有变化
: 後来我又改成
: $line =~ s/( )?/ /g;
: 结果文件的中文部分都变成了一堆问号的集合
: 英文全部变成全型
: 请问这是什麽问题呢?
: perl会无法判别全型的SPACE吗
: 还是语系的问题呢?
: 可是没有这一行的话,其他部分都能够全然处理成功说
: 希望能有解答
: 谢谢大家~
我猜测大概是 要处理的档案的编码跟 perl程式的文件编码不一样..
请注意要处理的档案格式跟你pl文件的编码是否相同
如果都相同的话 $line =~ s/ / /g; <-- 全形空白
以上这行是可以作用的
如果不相同的话 例如目标档案是utf8 pl是big5
pl会用big5的格式存全形空白 并使用big5格式去比对utf8格式的档案内容
程式执行时 用big5内容去比对utf8的内容 当然会错!
不过因为英文跟半形符号在big5跟utf8的16进位表示都是一样的
所以英文取代还是可以正常执行
所以有时後会误解perl不能处理中文XD
如果两者编码格式不同的话
可以这样写 $line =~ s/\xE3\x80\x80/ /g
或是
$a = '\xE3\x80\x80';
$line =~ s/$a/ /g
建议使用後者的作法 因为pl档案复制来复制去
哪天忘记把档案格式改成跟目标档案一样的话就会产生错误
然後建议处理中文文章 目标档案最好是utf8
因为big5编码有些字 会使用 \ $ 这些..
只要不用常规表示法就还ok 用了就有些状况会出错
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.169.41.107
※ 编辑: jjt 来自: 118.169.41.107 (10/30 01:30)
※ 编辑: jjt 来自: 118.169.41.107 (10/30 01:37)
1F:推 xsinx:谢谢大家,忘了说了我已经解决了,是编码问题没错 10/30 15:25