#!perl use v5.14; use Encode qw( encode decode ); use MIME::Base64; binmode STDOUT, ':encoding(UTF-8)'; local $, = "\t"; local $\ = "\n"; @ARGV = <@ARGV>; # Expand wildcards... LINE: while (<>) { next LINE unless m{ ^(\S+): # field name \s+ =[?]utf-8[?]B[?] ([^?]+) # base64 encoded text [?]= }ix; my ($field_name, $base64_encoded_text) = ($1, $2); my $base64_decoded_text = decode_base64($base64_encoded_text); my $utf8_decoded_text = decode('UTF-8', $base64_decoded_text); next LINE unless $utf8_decoded_text =~ m{ [^\p{Script=Common}\p{Script=Latin}] }x; my $damaged_text = $utf8_decoded_text; my $repaired_text = decode('UTF-8', encode('UCS-2LE', $damaged_text)); $repaired_text =~ s{\x{00}+$}{}; print $ARGV, $field_name, $repaired_text, $damaged_text; } exit 0;