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