我正在从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的字符串,但如何检测它是拉丁字符集还是UTF-8,以便只转换拉丁字符集字符串?
能够获得字符串是否为UTF-8的肯定或否定答案同样有用。