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
答案 0 :(得分:1)
获取列数后设置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
答案 1 :(得分:0)
或使用“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个
Hällö