#!/usr/bin/perl use strict; use warnings; use charnames (); use Encode qw(encode decode_utf8); use Unicode::Normalize; our $s1 = "\x55\xcc\x88bel \xc3\x9cbel gro\xc3\x9fe"; print STDERR "string: $s1 (" . &my_print($s1) . ")\n\n"; my $s2 = decode_utf8($s1); print STDERR "decode_utf8: $s2 (" . &my_print($s2) . ")\n\n"; my $s2b = encode("iso-8859-1", decode_utf8($s1)); print STDERR "ISO-8859-1: $s2b (" . &my_print($s2b) . ")\n\n"; my $s3 = NFC($s2); print STDERR "NFC: $s3 (" . &my_print($s3) . ")\n\n"; my $s4 = $s3; $s4 =~ s{([^\0-\177])}{N_escape($1)}eg; print STDERR "Unicode names: $s4 (...)\n\n"; exit; sub N_escape { my $n = charnames::viacode(ord($_[0])); return defined($n) ? "\\N{$n}" : sprintf('\x{%x}', ord($_[0])); } sub my_print { my $string = $_[0]; my $newstring = ''; my @chars = split(//, $string ) ; for my $char (@chars) { $newstring .= sprintf('\x{%x}', ord($char)) } return $newstring }