Perl UTF8 在 CGI 中的问题
Perl UTF8 in CGI problems
我有一个非常简单的 Perl 脚本,它可以在终端上正常工作,但是当 运行 作为 CGI 脚本时,它会产生垃圾。该脚本基本上采用 HTML 实体编码数据并将其转换为打印。我尝试了所有不同的设置,例如使用 "Encode" 更改输出并将 STDOUT 设置为 utf8 模式,但没有帮助。我也试过改变 CGI 的环境,看看是否能像终端环境那样工作。仍然没有运气。
这是脚本
#!/usr/bin/perl
use HTML::Entities qw(encode_entities_numeric decode_entities);
use Encode qw/encode decode/;
binmode(STDOUT, ":utf8");
#$ENV{'PERL_UNICODE'} = 'D';
#$ENV{'LANG'} = 'en_US.UTF-8';
#$ENV{'TERM'} = 'vt100';
#$ENV{'SHELL'} = '/bin/bash';
#binmode(STDOUT, ":utf8");
print "Content-type: text/html\n\n";
my $y = decode_entities("Συστήματα_&#x
391;νίχνευσης_Εισ.pd
f");
#print encode("UTF8",$y);
print $y;
终端输出很干净
Perl test.pl
内容类型:text/html
Συστήματα_Ανίχνευσης_Εισ.pdf
但在 CGI 打印上它是乱码
ȣυστȷÌϼα±Ï„α_δ_αεαεμυσȷς_α¹Ïƒ.pdf
我有点卡住了,因为我找不到任何简单的方法来解决这个问题。尝试了变量的 "encode_utf8" 和 utf8::upgrade 但仍然没有运气。任何人在这里的经验都会有很大帮助!
谢谢
维杰
在解释 HTML 文档时,浏览器需要知道编码。 HTML 标准的默认编码不是 UTF-8。由于浏览器采用了错误的编码,它会读取垃圾。
相反,您应该明确指定编码,例如通过打印元标记
<meta charset="utf-8">
或通过在内容类型中包含编码:
Content-type: text/html; charset=utf-8
在这里,使用内容类型似乎是最合适的。
我有一个非常简单的 Perl 脚本,它可以在终端上正常工作,但是当 运行 作为 CGI 脚本时,它会产生垃圾。该脚本基本上采用 HTML 实体编码数据并将其转换为打印。我尝试了所有不同的设置,例如使用 "Encode" 更改输出并将 STDOUT 设置为 utf8 模式,但没有帮助。我也试过改变 CGI 的环境,看看是否能像终端环境那样工作。仍然没有运气。
这是脚本
#!/usr/bin/perl
use HTML::Entities qw(encode_entities_numeric decode_entities);
use Encode qw/encode decode/;
binmode(STDOUT, ":utf8");
#$ENV{'PERL_UNICODE'} = 'D';
#$ENV{'LANG'} = 'en_US.UTF-8';
#$ENV{'TERM'} = 'vt100';
#$ENV{'SHELL'} = '/bin/bash';
#binmode(STDOUT, ":utf8");
print "Content-type: text/html\n\n";
my $y = decode_entities("Συστήματα_&#x
391;νίχνευσης_Εισ.pd
f");
#print encode("UTF8",$y);
print $y;
终端输出很干净 Perl test.pl 内容类型:text/html
Συστήματα_Ανίχνευσης_Εισ.pdf
但在 CGI 打印上它是乱码 ȣυστȷÌϼα±Ï„α_δ_αεαεμυσȷς_α¹Ïƒ.pdf
我有点卡住了,因为我找不到任何简单的方法来解决这个问题。尝试了变量的 "encode_utf8" 和 utf8::upgrade 但仍然没有运气。任何人在这里的经验都会有很大帮助!
谢谢 维杰
在解释 HTML 文档时,浏览器需要知道编码。 HTML 标准的默认编码不是 UTF-8。由于浏览器采用了错误的编码,它会读取垃圾。
相反,您应该明确指定编码,例如通过打印元标记
<meta charset="utf-8">
或通过在内容类型中包含编码:
Content-type: text/html; charset=utf-8
在这里,使用内容类型似乎是最合适的。