Если позиции / длины указаны в единицах кода Unicode:
# Use :encoding(UTF-8) on the file handle.
my @fields = unpack('A3 A16 A21', $decoded_line);
Если позиции / длины выражены в байтах:
use Encode qw( decode );
sub trim_end(_) { $_[0] =~ s/\s+\z//r }
# Use :raw on the file handle.
my @fields =
map trim_end(decode("UTF-8", $_)),
unpack('a3 a16 a21', $encoded_line);
В обоих случаях конечный пробелы обрезаются.