Как я могу правильно выровнять строки UTF-8 с printf Perl?

что правильный путь состоит в том, чтобы получить здесь красивый вывод (все строки тот же отступ)?

#!/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
6
задан tchrist 11 April 2015 в 00:22
поделиться

1 ответ

Я не смог его воспроизвести, но, в общем-то, похоже, что это несовпадение кодировки символов. Скорее всего, ваш исходный файл Perl был сохранен в кодировке UTF-8. Однако, вы не включили использование utf8; в скрипте. Таким образом, он интерпретирует каждый из немецких символов не-ASCII как два символа и устанавливает соответствующую подкладку. Но терминал, на котором вы работаете, также находится в режиме UTF-8, поэтому символы печатаются правильно. Попробуйте добавить с помощью предупреждений; и я готов поспорить, что вы получите предупреждение на печать, и я не удивлюсь, если добавление с помощью utf8; на самом деле исправит проблему.

4
ответ дан 16 December 2019 в 21:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: