use strict; my $uni_hex = 0x20ac; my $uni_chr = chr($uni_hex); my ( $u8_byts, $strpd_byts ); $u8_byts .= sprintf( "%02x ", $_) for ( unpack( "C*", $uni_chr )); $strpd_byts .= sprintf( "%02x ", $_ & 0x7f ) for ( unpack( "C*", $uni_chr )); ( my $u8_bits = unpack( "B*", $uni_chr )) =~ s/(.{8})/$1 /g; ( my $strpd_bits = $u8_bits ) =~ s/\b1/0/g; printf( "%s == %04x == %s == %s ^^ %s == %s\n", $uni_chr, $uni_hex, $u8_byts, $u8_bits, $strpd_byts, $strpd_bits );