4

从 Postgres 9.1.2 升级到 Postgres 9.4beta1 后,OTRS 3.3.5 停止使用在 http-error.log 中发现的 Perl 错误,该错误在关闭工单时引发。错误是:

[...]/Kernel/System.DB.pm 第 499 行的子例程条目中的宽字符

第 499 行如下:

if ( !$Self->{dbh}->do( $Param{SQL}, undef, @Array ) ) {

执行查询时似乎 Perl 脚本失败。

我的 Perl 版本是 v5.16.3。

我搜索了很多,但到目前为止没有解决方案对我有用。

4

1 回答 1

1

这是警告而不是错误。查看perldiag为我们提供了解释。

%s 中的宽字符

(S utf8) Perl 遇到了一个宽字符 (>255),但它没有预料到它。此警告默认为 I/O(如打印)打开。消除此警告的最简单方法是将 :utf8 层添加到输出中,例如 binmode STDOUT, ':utf8' 。另一种关闭警告的方法是添加 no warnings 'utf8'; 但这通常更接近作弊。通常,您应该使用编码显式标记文件句柄,请参阅 open 和 binmode。

你有 utf8 编码的字符,Perl 期望看到字节。您可能需要encode()在数据到达这一点之前对其进行处理。

于 2014-12-16T11:57:15.053 回答