当我尝试使用古老的 CMS(Bricolage)虚拟 FTP 上传某些模板文件时,它们无法传输并给出错误“打印宽字符”。我已经处理了这个问题很久了,如果有人能帮忙侦探,我想尝试解决它。开发人员不可能修复这个废弃软件。
这似乎是 net::FTPServer 的一个错误,它十多年来一直没有更新。
似乎可能不是期望 uft8 字符?有人能从导致错误的位置看到,是否有办法通过修补此文件来解决这个问题:
以下是具体位置:
以下是其中的摘录,最后一行是引发错误的行
while ($r = $file->sysread ($buffer, 65536))
{
$self->xfer ($r) if $self->{_xferlog};
# Restart alarm clock timer.
alarm $self->{_idle_timeout};
if ($transfer_hook
= $self->transfer_hook ("r", $file, $sock, \$buffer))
{
close $sock;
$file->close;
$self->_cleanup_filters (@filter_objects);
$self->reply (426,
"File retrieval error: $transfer_hook",
"Data connection has been closed.");
return;
}
for ($n = 0; $n < $r; )
{
# $w = $sock->syswrite ($buffer, $r - $n, $n);
$w = syswrite $sock, $buffer, $r - $n, $n;
Net::FTPServer::__ANON__("Wide character in syswrite at /usr/lib64/perl5/site_perl/5.10"...) called at /usr/lib64/perl5/site_perl/5.10.1/Net/FTPServer.pm line 5448
“打印中的宽字符”不是错误,而是警告。使用诊断程序会告诉您更多信息:
解决该问题的另一种方法是对字符串进行编码。