Perl 如何在IIS下设置LC_ALL和LANG?

Perl 如何在IIS下设置LC_ALL和LANG?,perl,iis,cgi,locale,Perl,Iis,Cgi,Locale,我正在尝试在IIS下运行一些Perl CGI脚本。我得到以下信息: CGI Error The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are: perl: warning: Setting locale failed. perl: warning: Please check that your locale

我正在尝试在IIS下运行一些Perl CGI脚本。我得到以下信息:


CGI Error
The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LC_ALL = (unset),
    LANG = (unset)
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
我发现只有当我“使用”我们的内部库时问题才会出现,但它确实是一个大库(使用许多其他东西),所以我更想知道在哪里查找。当我从命令行运行相同的脚本时,脚本运行得很好。我试图将“LANG”设置为“C”,然后将“LC_ALL”设置为“C”,但没有效果


欢迎指点

您的Perl应用程序似乎正在将其错误发送到浏览器,并且在发送头之前会发生错误

如果您使用的是CGI模块,第一个问题可能是由
使用CGI::CARP qw(fatalsToBrowser)
引起的


在这种情况下,
fatalsToBrowser
的危害比它的用处更大,因此我建议您暂时关闭它。

可能会对您有所帮助。它甚至还有一个疑难解答部分。

您可以通过设置PERL\u BADLANG=0来抑制此错误,但与LC\u ALL一样,需要在运行PERL脚本之前设置它。

LANG和LC\u ALL环境变量是为shell设置的,但它们不是为IIS设置的。我不是IIS的人,但文件说IIS是一项服务,你必须提前设置,然后重新启动

或者,您可以在脚本开始编译时(以及在加载导致问题的大型库之前)设置这些变量:

BEGIN { $ENV{LC_ALL} = ...; $ENV{LANG} = ...; } 开始{ $ENV{LC_ALL}=。。。; $ENV{LANG}=。。。; } 通过查看shell中的值来获取应该使用的值


祝你好运,

实际上,“CGI::Carp安排向浏览器发送一个最小的HTTP头,这样即使是在早期编译阶段出现的错误也能被看到。”(来自CGI::Carp的文档)。我怀疑是Perl本身造成了这些警告?我在这里做了一个有根据的猜测。如果我没记错的话,IIS也想要/想要HTTP响应头的第一行(“HTTP/1.1 200 OK”),这与apache和大多数其他Web服务器不同。可能是CGI::Carp没有做到这一点。