我有一台装有 openSUSE Leap 15.3 的服务器。
在此服务器上,我使用 apache2-mod_fcgi 运行 Apache 2.4.43。
我有以下程序:
test.fcgi
#!/usr/bin/perl
use JSON;
use CGI::Fast;
while (CGI::Fast->new) {
print "Content-type: text/html; charset=utf-8\n\n";
$array{strng} = "öäüöä";
$strng_json1 = to_json (\%array);
$strng_json2 = "{\"strng\":\"öäüöä\"}";
if ($strng_json1 eq $strng_json2) {
print "\$strng_json1 and \$strng_json2 are equal <br><br>";
}
print "\$strng_json1: $strng_json1 <br>";
print "\$strng_json2: $strng_json2 <br>";
}
如果我在浏览器中启动该程序,我会看到输出:
$strng_json1 and $strng_json2 are equal
$strng_json1: {"strng":"öäüöä"}
$strng_json2: {"strng":"öäüöä"}
我不明白的是,为什么如果
$strng_json1
和 $strng_json2
相等,在浏览器中我会看到两个不同的字符串。
您正在处理 CGI::Fast 中的错误(技术上是 FCGI::Request)以及您自己的错误。通过添加
use utf8;
并对输出进行编码来修复您的问题。 (通常情况下,我建议使用 use open ":std", ":encoding(UTF-8)";
来处理后者,但这在这里不起作用。)那么 CGI::Fast/FCGI::Request 中的错误不太可能打扰您。