Re: [問題] 全型空格置換
※ 引述《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)
推
10/30 15:25, , 1F
10/30 15:25, 1F
討論串 (同標題文章)
Perl 近期熱門文章
PTT數位生活區 即時熱門文章
10
113