我一直遇到来自不同编码的“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) };
我的问题是:这个过程的资源量有多大?我没有注意到减速,所以我认为我对它的工作方式感到满意,但如果有更有效的方法来做到这一点,我会很高兴听到它。