use charnames ':full'; use open ':locale'; use Encode; for (PerlIO::get_layers(STDOUT)){ if (/encoding\((.*)\)/ || /(utf8)/ ){ $lc||=$1; } } print "Locale is: $lc\n"; $_="@ARGV"; $_=decode($lc,$_); $_=~s<([^\x{000a}\x{0020}-\x{007e}])>{ '\N{'.charnames::viacode(ord $1).'}' }ge; print $_,"\n";