Как определить latin1 и UTF-8?

Я извлекаю строки из файла XML, и хотя это должен быть чистый UTF-8, это не так. Моя идея состояла в том, чтобы

#!/usr/bin/perl
use warnings;
use strict;
use Encode qw(decode encode);
use Data::Dumper;

my $x = "m\x{e6}gtig";
my $y = "m\x{c3}\x{a6}gtig";

my $a = encode('UTF-8', $x);
my $b = encode('UTF-8', $y);

print Dumper $x;
print Dumper $y;
print Dumper $a;
print Dumper $b;

if ($x eq $y) { print "1\n"; }
if ($x eq $a) { print "2\n"; }
if ($a eq $y) { print "3\n"; }
if ($a eq $b) { print "4\n"; }
if ($x eq $b) { print "5\n"; }
if ($y eq $b) { print "6\n"; }

выходы

$VAR1 = 'm�gtig';
$VAR1 = 'mægtig';
$VAR1 = 'mægtig';
$VAR1 = 'mægtig';
3

согласно идее, что только строка latin1 будет увеличивать его длину, но кодирование уже UTF-8 также делает его длиннее. Так что я не могу обнаружить латиноамериканский против UTF-8 таким образом.

Вопрос

Я хотел бы в конечном итоге всегда использовать строку UTF-8, но как я могу определить, является ли это latin1 или UTF-8, поэтому я конвертирую только строку latin1?

Возможность получить да / нет, если строка UTF-8 была бы такой же полезной.

Ответы на вопрос(1)

Ваш ответ на вопрос