Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何在控制台中正确显示消息?_Perl_Utf 8_Mojolicious - Fatal编程技术网

Perl 如何在控制台中正确显示消息?

Perl 如何在控制台中正确显示消息?,perl,utf-8,mojolicious,Perl,Utf 8,Mojolicious,我用的是一种迷人的应用程序。当我做日志记录时,如果一切正常,除了在morbo下运行应用程序,我会看到如下文本: $app->log->info('тест лога'); [Sat Oct 6 15:22:43 2018] [info] Ñ�еÑ�Ñ� лога utf8有一些问题 我应该怎么做才能正确显示消息? 我的终端支持utf8。我运行LinuxMintV19.3 以下是来自脚本的消息的外观: 测试终端: 尝试在系统中运行以下代码示例。测试通过终端中正确的UT

我用的是一种迷人的应用程序。当我做日志记录时,如果一切正常,除了在morbo下运行应用程序,我会看到如下文本:

$app->log->info('тест лога');
[Sat Oct  6 15:22:43 2018] [info] �е�� лога 
utf8有一些问题

我应该怎么做才能正确显示消息?

我的终端支持utf8。我运行LinuxMintV19.3

以下是来自脚本的消息的外观:

测试终端:

尝试在系统中运行以下代码示例。测试通过终端中正确的UTF-8输出进行确认

#!/usr/bin/env perl

use Mojolicious::Lite -signatures;

get '/' => sub ($c) {
  $c->render(text => 'Hello World!');
};

app->log->info('тест лога');
app->start;
morbo test.pl
的方式运行会产生以下输出

:u99257852:~/work/perl/mojo$ morbo ./test.pl
Web application available at http://127.0.0.1:3000
[2020-10-31 13:33:57.42056] [83940] [info] тест лога
[2020-10-31 13:35:16.72465] [83940] [debug] [hga9Tgyy] GET "/"
[2020-10-31 13:35:16.72528] [83940] [debug] [hga9Tgyy] Routing to a callback
[2020-10-31 13:35:16.72574] [83940] [debug] [hga9Tgyy] 200 OK (0.001078s, 927.644/s)
(uiserver):u99257852:~/work/perl/mojo$
使用nc localhost 3000进行本地测试

(uiserver):u99257852:~$ nc localhost 3000
GET / HTTP/1.1

HTTP/1.1 200 OK
Date: Sat, 31 Oct 2020 17:35:16 GMT
Server: Mojolicious (Perl)
Content-Type: text/html;charset=UTF-8
Content-Length: 12

Hello World!
uname-a的输出

(uiserver):u99257852:~/work/perl/mojo$ uname -a
Linux infongwp-us19 4.4.223-icpu-044 #2 SMP Sun May 10 11:26:44 UTC 2020 x86_64 GNU/Linux
(uiserver):u99257852:~/work/perl/mojo$
Bash是用户的shell,配置有
~/.bashrc
,具有以下设置以支持UTF-8


尝试在系统中运行以下代码示例。测试通过终端中正确的UTF-8输出进行确认

#!/usr/bin/env perl

use Mojolicious::Lite -signatures;

get '/' => sub ($c) {
  $c->render(text => 'Hello World!');
};

app->log->info('тест лога');
app->start;
morbo test.pl
的方式运行会产生以下输出

:u99257852:~/work/perl/mojo$ morbo ./test.pl
Web application available at http://127.0.0.1:3000
[2020-10-31 13:33:57.42056] [83940] [info] тест лога
[2020-10-31 13:35:16.72465] [83940] [debug] [hga9Tgyy] GET "/"
[2020-10-31 13:35:16.72528] [83940] [debug] [hga9Tgyy] Routing to a callback
[2020-10-31 13:35:16.72574] [83940] [debug] [hga9Tgyy] 200 OK (0.001078s, 927.644/s)
(uiserver):u99257852:~/work/perl/mojo$
使用nc localhost 3000进行本地测试

(uiserver):u99257852:~$ nc localhost 3000
GET / HTTP/1.1

HTTP/1.1 200 OK
Date: Sat, 31 Oct 2020 17:35:16 GMT
Server: Mojolicious (Perl)
Content-Type: text/html;charset=UTF-8
Content-Length: 12

Hello World!
uname-a的输出

(uiserver):u99257852:~/work/perl/mojo$ uname -a
Linux infongwp-us19 4.4.223-icpu-044 #2 SMP Sun May 10 11:26:44 UTC 2020 x86_64 GNU/Linux
(uiserver):u99257852:~/work/perl/mojo$
Bash是用户的shell,配置有
~/.bashrc
,具有以下设置以支持UTF-8


在使用Mojo::Log写入STDERR时,不要使用以下命令:

binmodestderr':编码(UTF-8)';

日志使用UTF-8显式地对它记录的所有内容进行编码,即使在写入STDERR时也是如此

子追加{
我的($self,$msg)=@;
返回,除非my$handle=$self->handle;
flock$手柄,锁紧;
$handle->print(encode('UTF-8',$msg))或croak“无法写入日志:$!”;
拉手,锁;
}
当使用STDERR作为日志输出(默认值)时,这与向STD*添加编码层的既定实践相冲突。在这种情况下,会发生双重编码

因此,我们必须避免这样做

binmodestderr':编码(UTF-8)';
请注意,这是作为

use open ':std', ':encoding(UTF-8)';

在使用Mojo::Log写入STDERR时,不要使用以下命令:

binmodestderr':编码(UTF-8)';

日志使用UTF-8显式地对它记录的所有内容进行编码,即使在写入STDERR时也是如此

子追加{
我的($self,$msg)=@;
返回,除非my$handle=$self->handle;
flock$手柄,锁紧;
$handle->print(encode('UTF-8',$msg))或croak“无法写入日志:$!”;
拉手,锁;
}
当使用STDERR作为日志输出(默认值)时,这与向STD*添加编码层的既定实践相冲突。在这种情况下,会发生双重编码

因此,我们必须避免这样做

binmodestderr':编码(UTF-8)';
请注意,这是作为

use open ':std', ':encoding(UTF-8)';

您没有指定运行脚本的操作系统。也许您使用的MS Windows不是针对俄罗斯的本地化版本。在这种情况下,您需要在terminal
chcp 65001
中发布以切换代码页以支持UTF-8。我使用Linux Mint v19.3,如果您
在terminal
中使用“tituteöССаа”编辑一些文件,它是否以可读形式打印?只是为了确认为UTF-8调优的终端。也许默认情况下,mojo没有为UTF-8输出设置。尝试在主文件
binmode STDOUT':encodin(UTF-8)
的开头添加。注意:如果前一行没有帮助,日志工具可以使用STDERR-
:encoding
,而不是
:encodin
,顺便说一句。您没有指定运行脚本的操作系统。也许您使用的MS Windows不是针对俄罗斯的本地化版本。在这种情况下,您需要在terminal
chcp 65001
中发布以切换代码页以支持UTF-8。我使用Linux Mint v19.3,如果您
在terminal
中使用“tituteöССаа”编辑一些文件,它是否以可读形式打印?只是为了确认为UTF-8调优的终端。也许默认情况下,mojo没有为UTF-8输出设置。尝试在主文件
binmode STDOUT':encodin(UTF-8)
的开头添加。注意:如果前一行没有帮助,日志工具可以使用STDERR-
:encoding
,而不是
:encodin
,顺便说一句。感谢您提供关于binmode的提示。我发现了问题。我会在不同的答案上发布,但可能我们需要将其合并到您的OneNote中感谢您对binmode的提示。我发现了问题。我会把它贴在不同的答案上,但我们可能需要把它合并到你的答案中