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

看板Perl作者時間15年前 (2009/10/28 18:21), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串2/3 (看更多)
※ 引述《xsinx (鮮菇)》之銘言: : 文件內容大概是長這樣的: : 我(I) 有(Have) 一隻(A) 狗(Dog) . : 想要將文件裡的所有全型空格置換成半型空格 : 再做其他的處理 : 我的寫法是先讀進這個檔案並存至@line : 如下 : foreach $line (@line) : { : $line =~ s/ / /g; : ... : ... : } : 可執行後卻好像完全忽略掉這一行 : 都沒有變化 : 後來我又改成 : $line =~ s/( )?/ /g; : 結果文件的中文部分都變成了一堆問號的集合 : 英文全部變成全型 : 請問這是什麼問題呢? : perl會無法判別全型的SPACE嗎 : 還是語系的問題呢? : 可是沒有這一行的話,其他部分都能夠全然處理成功說 : 希望能有解答 : 謝謝大家~ 建議您可以先使用 Data::Dump 模組來確定各內容是使用 DBCS 或是 MBCS 的編碼。另外尚需考慮三個部份的編碼: 1. 外部檔案的原始編碼,如 line.txt。 2. Perl 內部字串的編碼,變數內部的編碼方式。 3. 程式原始檔案的編碼,如 line.pl。 關於 DBCS 與 MBCS 可以參考: http://en.wikipedia.org/wiki/DBCS http://en.wikipedia.org/wiki/Variable-width_encoding 執行結果如下: ( "Data::Dump", pack("H*","e68891284929e38080e69c89284861766529e38080e4b880e99abb284129e38080 ^^^^^^ ^^^^^^ ^^^^^^ OCe78b9728446f6729e380802e0a"), ^^^^^^ ) ("Data::Dump", "\xE3\x80\x80") ( "Data::Dump", "\x{6211}(I)\x{3000}\x{6709}(Have)\x{3000}\x{4E00}\x{96BB}(A)\x{3000} ^^^^^^^^ ^^^^^^^^ ^^^^^^^^ \x{72D7}(Dog)\x{3000}.\n", ^^^^^^^^ ) ("Data::Dump", "\x{3000}") 我(I) 有(Have) 一隻(A) 狗(Dog) . ==== line.pl ================================================================= #!/usr/bin/perl -w use strict; use warnings; use Data::Dump; open(FH, "line.txt"); my $line = <FH>; close(FH); my $space = " "; print Data::Dump->dump($line), "\n"; print Data::Dump->dump($space), "\n"; print Data::Dump->dump(decode('utf-8', $line)), "\n"; print Data::Dump->dump(decode('utf-8', $space)), "\n"; $line =~ s/$space/ /g; print $line; -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.64.130

10/28 20:26, , 1F
專業推!!
10/28 20:26, 1F

10/29 10:06, , 2F
推!!
10/29 10:06, 2F
文章代碼(AID): #1Aw1iVDj (Perl)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):
文章代碼(AID): #1Aw1iVDj (Perl)