Re: [問題] 全型空格置換

看板Perl作者 (新竹)時間15年前 (2009/10/30 01:24), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串3/3 (看更多)
※ 引述《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
文章代碼(AID): #1AwS_91o (Perl)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
文章代碼(AID): #1AwS_91o (Perl)