一、檔案編碼問題:
日誌格式可以為 UTF-8無BOM格式 或者
ANSI格式編碼。
因為UTF-8格式編碼會導致出現一些奇怪的問題,比如,第一行的log或待匹配的關鍵字 查詢不到。
原因是:UTF-8編碼的檔案中,BOM佔三個位元組。如果用記事本把一個文字檔另存新檔UTF-8編碼方式的話,用UE開啟這個檔案,切換到十六進位編輯狀態就可以看到開頭的FFFE了。
切記。尤其是手動寫了關鍵字列表需要去log中尋找時一定要注意編碼格式不要是UTF-8格式。
http://blog.sina.com.cn/s/blog_570f6d940100h3vk.html(UTF—8與UTF—8(無bom)格式相比有什麼不同)
二、讀檔案匹配過程編碼問題:
讀檔案後,在匹配的時候注意是應該用“Regex”還是用“eq”。
前幾天做一個詞條pv統計的工作,兩種方式得到的結果不一樣。找了很久的原因,各種編碼方式換來換去的試用啊,最後的原因為:
1、keywords.txt的編碼改為UTF-8無BOM格式,兩種方式的PV差距縮小了一些。
2、將使用re匹配的規則換用eq來比較,兩種方式的PV結果一樣了。
汗啊~~~
三、附屬對比代碼:
1、笨方法:
$_ = decode('utf8',$_);#if( $_ =~/(北京首都機場賓館|廣州維景大酒店|德勝酒店|三亞萬豪度假酒店|伯瓷酒店|竹灣酒店|葡京酒店|凱悅酒店|華威酒店|靈山大佛|黿頭渚|東部華僑城|張家界|周莊|象鼻山|千島湖\[杭州\])(\d+)/){###開始導致PV值大的原因if( $_ =~/(.*)(\d+)/){if($1 eq "北京首都機場賓館"|$1 eq "廣州維景大酒店"|$1 eq "德勝酒店"|$1 eq "三亞萬豪度假酒店"|$1 eq "伯瓷酒店"|$1 eq "竹灣酒店"|$1 eq "葡京酒店"|$1 eq "凱悅酒店"|$1 eq "華威酒店"|$1 eq "靈山大佛"|$1 eq "黿頭渚"|$1 eq "東部華僑城"|$1 eq "張家界"|$1 eq "周莊"|$1 eq "象鼻山"|$1 eq "千島湖[杭州]"){####後來正確的PV值my ($doc_title, $doc_pv) = ($1,$2);print $doc_title."\t".$doc_pv."\n";$docInfo{$doc_title}{'pv'}+=$doc_pv;$totalNum+=$doc_pv;}}
2、效率高的方法,切記,keywords.txt的編碼格式要為UTF-8無BOM格式.
while(<FH1>){chomp($_);if($_=~/(.*)\s(\d*)/ && defined($wordhash{$1})){print decode('utf8',$_),"\n";$wordhash{$1} += $2;$sumPV += $2;}