С помощью этого кода:
#!/usr/bin/perl
use warnings FATAL => 'all';
use strict;
use MIME::QuotedPrint;
my $encoded = "=4E=6F=74=65=73=0A=4E=6F=74=65=73=20=6C=69=6E=65=20=32";
print decode_qp($encoded);
my $decoded = "Imported today";
$encoded = encode_qp($decoded);
print "\n$encoded\n";
Первый оператор печати дает именно то, что я ожидал, но второй дает Imported today=
вместо =49=6D
и т. д.
Что я делаю не так?
В документации MIME::QuotedPrint говорится (выделено мной):
Каждый непечатаемый символ (по определению американцев английского происхождения) представлен тройкой, состоящей из символа «=", за которым следуют две шестнадцатеричные цифры.
И действительно, в тестах дистрибутива можно найти
# plain ascii should not be encoded
["", ""],
["quoted printable" =>
"quoted printable=\n"],
Итак, вы не делаете ничего плохого, ваши ожидания ошибочны.
Чтобы получить ожидаемый результат, вам не нужен какой-либо модуль:
my $encoded = join "", map sprintf("=%02X", ord), split //, 'Imported today';
@SteveWaring: Вы правы, исправили формат :-) Спасибо.
Это здорово, спасибо. Формат sprintf должен быть «=%02X», чтобы получить «=0A» вместо «= a».