为什么 Term::Size 似乎搞乱了 Perl 的输出编码?

发布于 2024-08-25 23:52:43 字数 379 浏览 4 评论 0原文

Term::Size-module 混淆了编码。我该如何解决这个问题?

#!/usr/bin/env perl
use warnings; use strict;
use 5.010;
use utf8;
binmode STDOUT, ':encoding(UTF-8)';
use Term::Size;

my $string = 'Hällö';
say $string;

my $columns = ( Term::Size::chars *STDOUT{IO} )[0];

say $columns;
say $string;

输出:

哈勒
140
H�ll�

The Term::Size-module jumbles up the encoding. How can I fix this?

#!/usr/bin/env perl
use warnings; use strict;
use 5.010;
use utf8;
binmode STDOUT, ':encoding(UTF-8)';
use Term::Size;

my $string = 'Hällö';
say $string;

my $columns = ( Term::Size::chars *STDOUT{IO} )[0];

say $columns;
say $string;

Output:

Hällö
140
H�ll�

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

猫九 2024-09-01 23:52:44

获取列数后设置 binmode 似乎可以解决问题

say $string;

my $columns = ( Term::Size::chars *STDOUT{IO} )[0];
binmode STDOUT, ':encoding(UTF-8)';

say $columns;
say $string;

哈勒
80
哈勒


奇怪的是,这段代码在 perl 5.8 上运行良好(输出是正确的),而无需重置 binmode

Setting the binmode after getting the column count seems to do the trick:

say $string;

my $columns = ( Term::Size::chars *STDOUT{IO} )[0];
binmode STDOUT, ':encoding(UTF-8)';

say $columns;
say $string;

Outputs

Hällö
80
Hällö


The strange thing is that this code works fine with perl 5.8 (the output is correct) without having tho reset the binmode

小红帽 2024-09-01 23:52:44

或者使用“chars”:

#!/usr/bin/env perl
use strict;
use warnings;
use 5.012;
use utf8;
binmode STDOUT, ':encoding(UTF-8)';
use Term::Size qw(chars);

my $string = 'Hällö';
say $string;

my $columns = ( chars )[0];

say $columns;
say $string;

输出:

哈勒
82
哈勒

Or using "chars":

#!/usr/bin/env perl
use strict;
use warnings;
use 5.012;
use utf8;
binmode STDOUT, ':encoding(UTF-8)';
use Term::Size qw(chars);

my $string = 'Hällö';
say $string;

my $columns = ( chars )[0];

say $columns;
say $string;

Output:

Hällö
82
Hällö

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文