我在 Perl 中有一个带有 POE 的 Web 服务器。在数据到达线路之前,头部和正文在 POE::Filter::HTTPD->put 中连接。出于某种奇怪的原因,一些标头被提升为 utf-8,这意味着二进制正文正在损坏。
问题是 headers_as_strings() 中的连接正在将某些标头升级到 UTF-8,即使它不应该。例如,如果我添加以下代码,则只有最后一行会产生警告。因此,连接 3 个非 utf8 字符串会生成 UTF-8 字符串,但并非针对所有标题。解决方案是 utf8::downgrade on $ret[-1] 但我想知道为什么会这样
my $vnl = _process_newline( $value, $endl );
warn "$$: '$name' is utf8" if utf8::is_utf8( $name );
warn "$$: '$sep' is utf8" if utf8::is_utf8( $sep );
warn "$$: '$vnl' is utf8" if utf8::is_utf8( $vnl );
push @ret, join $sep, $name, $vnl;
# only this last line produces a warning
warn "$$: the join has utf8 " if utf8::is_utf8( $ret[-1] );