如何在IIS下设置LC_ALL和LANG?

时间:2008-12-08 16:56:26

标签: 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 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”,但它没有效果。

欢迎任何指示!

4 个答案:

答案 0 :(得分:2)

为shell设置了LANG和LC_ALL环境变量,但是没有为IIS设置它们。我不是IIS的人,但文档说IIS是一项服务,你必须提前设置,然后重新启动。

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

BEGIN {
 $ENV{LC_ALL} = ...;
 $ENV{LANG} = ...;
 }

通过查看shell中的值来获取应该使用的值。

祝你好运,

答案 1 :(得分:0)

您的Perl应用程序似乎正在向浏览器发送错误,并且在发送标头之前发生错误。

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

在这种情况下fatalsToBrowser造成的伤害比使用时更大,所以我建议你暂时将其关闭。

答案 2 :(得分:0)

perldoc for locale可能会对您有所帮助。它甚至还有一个故障排除部分。

答案 3 :(得分:0)

您可以通过设置PERL_BADLANG = 0来抑制此错误,但是,在运行Perl脚本之前,需要设置,如LC_ALL。