您的位置:首页 > 其它

日志分析中文件编码问题以及读文件匹配问题总结

2012-07-26 16:44 92 查看
一、文件编码问题:

日志格式可以为 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)格式相比有什么不同)

二、读文件匹配过程编码问题:

读文件后,在匹配的时候注意是应该用“正则表达式”还是用“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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐