加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何将UTF-8字符串与Perl的printf正确对齐?

发布时间:2020-12-16 06:20:11 所属栏目:大数据 来源:网络整理
导读:什么是正确的方式来获得一个美丽的输出(所有行相同的缩进)? #!/usr/bin/env perluse warnings;use strict;use DBI;my $phone_book = [ [ qw( name number ) ],[ 'Kroner',123456789 ],[ 'Holler',[ 'Müh?ig',[ 'Singer',[ 'Maurer',];my $dbh = DBI-connec
什么是正确的方式来获得一个美丽的输出(所有行相同的缩进)?

#!/usr/bin/env perl
use warnings;
use strict;
use DBI;

my $phone_book = [ [ qw( name number ) ],[ 'Kroner',123456789 ],[ 'Holler',[ 'Müh?ig',[ 'Singer',[ 'Maurer',];

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 %10sn",@$row;
}

# OUTPUT:

#   Kroner  123456789
#   Holler  123456789
# Müh?ig  123456789
#   Singer  123456789
#   Maurer  123456789

解决方法

我无法重现它,但松散地说,似乎正在发生的是它是一个编码不匹配的字符.很可能您的Perl源文件已保存为UTF-8编码.但是你没有启用使用utf8;在脚本中.因此,它将每个非ASCII德语字符解释为两个字符并相应地设置填充.但是您运行的终端也处于UTF-8模式,因此字符打印正确.尝试添加使用警告;而且我敢打赌你会收到警告,如果加上使用utf8,我也不会感到惊讶;实际上解决了这个问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读