$octets = encode("utf8", $string);
####
use Encode qw( encode );
sub string_to_literal {
local $_ = @_ ? $_[0] : $_;
s/(.)/
my $o = ord($1);
if ($1 eq '"' ) { '\\"' }
elsif ($1 eq '\\' ) { '\\\\' }
elsif ($1 < 0x20 || $1 >= 0x7F) { sprintf('\\x{%X}', $o) }
else { $1 }
/eg;
return qq{"$_"};
}
sub octet_dump {
return join ' ',
map { sprintf('%02X', ord($_)) }
map /(.)/g,
@_ ? $_[0] : $_;
}
$string = "\x{03c5}";
print("\$string is ", length($string), " chars long: ");
print(string_to_literal($string), "\n");
$octets = encode("utf8", $string);
print("\$octets is ", length($octets), " bytes long: ");
print(octet_dump($octets), "\n");
####
$string is 1 chars long: "\x{3C5}"
$octets is 2 bytes long: CF 85