Wie erkennt man latin1 und UTF-8?

Ich extrahiere Zeichenfolgen aus einer XML-Datei, und obwohl es sich um reines UTF-8 handelt, ist dies nicht der Fall. Meine Idee war zu

#!/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"; }

Ausgänge

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

unter der Idee, dass nur ein latin1-String seine Länge erhöhen würde, aber die Kodierung eines bereits UTF-8-Strings verlängert ihn ebenfalls. Auf diese Weise kann ich latin1 vs UTF-8 nicht erkennen.

Frage

Ich möchte am Ende immer eine UTF-8-Zeichenfolge haben, aber wie kann ich erkennen, ob es sich um latin1 oder UTF-8 handelt, sodass ich nur die latin1-Zeichenfolge konvertiere?

In der Lage zu sein, ein Ja / Nein zu erhalten, wenn ein String UTF-8 ist, wäre genauso nützlich.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage