“昂贵”是Perl的Encode :: Detect :: Detector

时间:2012-09-01 19:09:33

标签: perl utf-8 decode utf8-decode

我一直遇到来自不同编码的“gremlins”的问题,这些编码混合到Perl程序中的数据库的表单输入和数据中。起初,我没有解码,智能引号和类似的东西会产生多个乱码;但是,盲目地解码所有内容,因为UTF-8导致旧的Windows-1252内容被填充问号。

所以,我使用了Encode :: Detect :: Detector和decode()函数来检测和解码所有POST和GET输入,以及来自SQL数据库的数据(解码过程可能发生在10-20个字符串上)每次生成页面时的文本)。这似乎可以清理,因此UTF-8,ASCII和Windows-1252内容都可以正确显示为UTF-8输出(正如我在HTML标题中指定的那样):

    my $encoding_name = Encode::Detect::Detector::detect($value);   
    eval { $value = decode($encoding_name, $value) };

我的问题是:这个过程资源如何沉重?我没有注意到减速,所以我觉得我对它的运作方式感到满意,但如果有更有效的方法,我会很高兴听到它。

1 个答案:

答案 0 :(得分:3)

答案是高度依赖于应用程序的,因此“费用”的可接受性是您的号召。

量化开销的最佳方法是分析代码。你可能希望给Devel::NYTProf一个旋转。

Tim Bunce's YAPC::EU presentation提供有关该模块的更多详细信息。