【发布时间】: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 Essentials 中 Tom Christiansen’s Materials for OSCON 2011 中推荐的设置(片段)是
use utf8;
use open qw( :encoding(UTF-8) :std );
如何获得与我使用上述类似的东西类似的东西?我更喜欢自动处理 Unicode,而不必记住使用 to_utf8() 标记来自外部命令和文件的所有输出字符串。
数据来自外部文件,或来自外部命令的输出,它应该是 UTF-8,但由于用户错误有时它不是。
【问题讨论】:
-
也许这个答案提供了一些见解stackoverflow.com/questions/6234386/…
标签: perl web-applications unicode utf-8