[PerlChina] 【请教】perl提取网页TXT时候的乱码问题

Achilles Xu formalin14 at gmail.com
Tue Apr 17 03:13:29 PDT 2007


对于大文件,如果需要读取速度,就不要一行一行低地读,因为这样会导致每个字符都与\n比较。可以依据个人内存的大小,一次用sysread读入100M,在内存中处理。尽量减少I/O的次数。处理内存中的数据的时候,最好使用Inline::C,以尽量减少内存拷贝。比如以\n切割字符串到数组里,只需把\n的这格内存替换成\0,然后把切开的各个字符串的起始位置指针压入返回值栈就行了。

在07-4-17,Dongxu Ma <dongxu.ma at gmail.com> 写道:
>
> 在07-4-17,Zhu Zhu <zhuzhu at perlchina.org> 写道:
> >
> > 没有遇到过,我只遇到过 1G - 2G 的日志处理,不过我不知道怎么才能合理读取这么
> > 大的文件,
> > 要求是从日志文件中每天提取前一天的记录。到每个月 20号的时候就用差不多2G了,
> > 请问
> > 对于这种大日志文件我该怎么做呢?
>
>
> logrotate
>
> 在 Tue, 17 Apr 2007 15:07:19 +0800,Achilles Xu <formalin14 at gmail.com> 写
> > 道:
> >
> > > perl中处理中文的原则:
> > >
> > > 让中文字符串在perl中以utf8的形式存在。一个字符串进来的时候如果是其他编
> > > 码,先转成utf8,出去的时候再转成相应的编码。这样可以保证任何操作都不出
> > > 错。
> > >
> >
> >
> 很对,如果只是单纯copy或者move这样的整块stream,不考虑编码一般没问题。
> 但要process,比如现在要分析html结构,就另当别论了。
> process通常需要识别一定的token,比如html中的'<' '>'。
> 宽字节的编码都会把非asc部分编码为两个或以上字节,如果你把这些编码后的字节串
> 直接看作asc,(这是你perl里将为出现的情况),那某个宽字符编码出来的某个byte可
> 能恰好就是'<'或者'>',这是导致混乱的原因,如果像libXML这样的非容错解析,会
> 马上报错,碰上可容错的,一般会把到此为止的部分return回去。
> 这是转为utf8的真正原因,因为perl里unicode编码就是utf8。
> --
> cheers,
> -dongxu
> __END__
> http://search.cpan.org/~dongxu <http://search.cpan.org/%7Edongxu>
>
> _______________________________________________
> China-pm mailing list
> China-pm at pm.org
> http://mail.pm.org/mailman/listinfo/china-pm
>



-- 
---------------------------
Achilles Xu
http://www.lazycode.org/achilles/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.pm.org/pipermail/china-pm/attachments/20070417/09216f43/attachment-0001.html 


More information about the China-pm mailing list