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

标签 perl unicode 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

最佳答案

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

关于perl - 如何将 UTF-8 字符串与 Perl 的 printf 正确对齐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2064543/

相关文章:

c# - 如何为unicode字符串的存储过程中的参数添加前缀 'N'

python - 使用 utf-8 字符串解码 msgpack_numpy

python - sklearn 管道中的持久标签编码

perl - 将 catfile 用于以目录结尾的路径时有危险吗?

multithreading - Perl - 如何在线程之间共享对象

php - 如何从 php 启动和停止 perl 守护进程

excel - XML -> 使用编码 UTF-8 的 XSLT 不适用于 Microsoft Excel - 为什么?

regex - 如何替换除西​​类牙语以外的所有 unicode 字符?

asp.net - 无法将索引 35 处的字节 [FC] 从指定的代码页转换为 Unicode

unicode - 如何将 UNICODE 希伯来语在 VBScript 中显示为乱码?