Как я могу установить кодировку для канала Perl? - PullRequest
1 голос
/ 04 февраля 2010

Есть "'| -: encoding (utf-8)'" в "open my $ column, '| -: encoding (utf-8)', qw (column);" ОК? Кажется, работает почти. В строке с «Mikołaj» форматирование некорректно; как я могу это исправить?

#!/usr/bin/perl
use warnings;
use strict;
use utf8;
binmode STDOUT, ':encoding(utf-8)';
# edit:
binmode DATA, ':encoding(utf-8)';

open my $column, '|-:encoding(utf-8)', qw(column);
print $column "$_\n" for <DATA>;

__DATA__
Julius
Giovanni
George
Alonso
Jerome
Eugène
Reinhold
Gustav
Pavel
Franz
Max
Mikołaj
Maurice
Alec
Émile
Xaver
Henry
Wolfgang
Alexander
Enrico
Bedrich
Joaquín
Bartholomäus
Otto
Carl
Isaak
Anatol
Leos
Herbert
Paul
Benjamin
Matthew
Jean

Ответы [ 2 ]

2 голосов
/ 04 февраля 2010

Вы говорите о форматировании и, очевидно, хотите выровнять вывод. Я заметил, что ł - единственный символ в образце, который не встречается в Latin1. Чтобы исключить проблему, связанную с тем, что у вас просто дурацкий шрифт, настройте свой терминал так, чтобы он отображал корректный шрифт с широким охватом: DejaVu Sans Mono это хорошо.

Кроме того, вы уже расшифровали вывод? Вот что я получаю:

0000  4d 69 6b 6f c5 82 61 6a  0a                       Miko..aj .
1 голос
/ 04 февраля 2010

Этот пример скрипта работает правильно для меня в BSD / OSX. Обычно, когда есть проблема с форматированием, это где-то несовпадение кодировки. Убедитесь:

  • файл сохраняется в формате UTF8 (проверьте, какой текстовый редактор вы используете)
  • ваш терминал обрабатывает UTF8 (просмотрите файл в терминале, должен отображаться правильно)
...