【问题标题】:How to deal with invalid UTF-8 characters in a Perl webapp?如何处理 Perl webapp 中的无效 UTF-8 字符?
【发布时间】:2011-10-25 19:26:40
【问题描述】:

如何处理来自外部文件/外部命令的数据中的无效 UTF-8 序列,哪些数据用于生成 HTML(在 Perl Web 应用程序中)?

目前我在每条数据上运行to_utf8();所述子程序检测数据是否为无效的 UTF-8,并回退到 'latin1' 编码:

use utf8;
use Encoding;
binmode STDOUT, ':utf8';

sub to_utf8 {
    my $str = shift;
    return undef unless defined $str;
    if (utf8::valid($str)) {
        utf8::decode($str);
        return $str;
    } else {
        return decode($fallback_encoding, $str, Encode::FB_DEFAULT);
    }
}

如果此代码不正确,请纠正我。

Perl Unicode EssentialsTom Christiansen’s Materials for OSCON 2011 中推荐的设置(片段)是

use utf8;
use open qw( :encoding(UTF-8) :std );

如何获得与我使用上述类似的东西类似的东西?我更喜欢自动处理 Unicode,而不必记住使用 to_utf8() 标记来自外部命令和文件的所有输出字符串。

数据来自外部文件,或来自外部命令的输出,它应该是 UTF-8,但由于用户错误有时它不是。

【问题讨论】:

标签: perl web-applications unicode utf-8


【解决方案1】:

您可以编写一个自定义 IO 层来执行“神奇”解码。

通常 IO 层(如 :utf8)是用 XS 编写的,但核心模块 PerlIO::via(请参阅 http://search.cpan.org/perldoc?PerlIO::via)允许您为此使用 perl 代码。

【讨论】:

    猜你喜欢
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 2012-07-03
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 2012-05-02
    相关资源
    最近更新 更多