sid*_*com 6 unicode perl encoding
什么是在这里获得漂亮的输出(所有行都相同的缩进)的正确方法?
#!/usr/bin/env perl
use warnings;
use strict;
use DBI;
my $phone_book = [ [ qw( name number ) ],
[ 'Kroner', 123456789 ],
[ 'Holler', 123456789 ],
[ 'Mühßig', 123456789 ],
[ 'Singer', 123456789 ],
[ 'Maurer', 123456789 ],
];
my $dbh = DBI->connect( "DBI:CSV:", { RaiseError => 1 } );
$dbh->do( qq{ CREATE TEMP TABLE phone_book AS IMPORT( ? ) }, {}, $phone_book );
my $sth = $dbh->prepare( qq{ SELECT name, number FROM phone_book } );
$sth->execute;
my $array_ref = $sth->fetchall_arrayref();
for my $row ( @$array_ref ) {
printf "%9s %10s\n", @$row;
}
# OUTPUT:
# Kroner 123456789
# Holler 123456789
# Mühßig 123456789
# Singer 123456789
# Maurer 123456789
Run Code Online (Sandbox Code Playgroud)
我无法重现它,但宽泛地说,似乎发生的是字符编码不匹配。您的 Perl 源文件很可能已以 UTF-8 编码保存。但是您尚未use utf8;在脚本中启用。因此,它将每个非 ASCII 德语字符解释为两个字符,并相应地设置填充。但您运行的终端也处于 UTF-8 模式,因此字符可以正确打印。尝试添加,我敢打赌您会收到一条警告,如果添加实际上解决了问题,use warnings;我不会感到惊讶。use utf8;