#!/usr/bin/perl
use warnings;
use strict;
use Encode;
binmode STDOUT, ":encoding(utf8)";
open F1, "<:utf8", "$ARGV[0]" or die "$!";
open F2, "<", "$ARGV[0]" or die "$!";
my $a1 = <F1>;
chomp $a1;
my $a2 = <F2>;
chomp $a2;
if ($a1 eq $a2) {
print "$a1=$a2 is true\n";
} else {
print "$a1=$a2 is false\n";
}
my $b = decode("utf-8", $a2);
if ($a1 eq $b) {
print "$a1=$b is true\n";
} else {
print "$a1=$b is false\n";
}
上記のテストプログラムを書きました。基地局という 1 行のテキスト ファイルを作成します。このテキスト ファイルを使用してプログラムを実行すると、false と true を取得できます。あなたのプログラムの内容はわかりませんが、csv ファイルはパーサーやエンコード/デコード手順なしでプレーン テキストとして読み取られると思いますが、xml ファイルは何らかのライブラリで解析する必要があるため、内部のエンコード メカニズムが異なります。エンコーディング表記の先行バイトを含む、2 つの文字列変数の場合。簡単に言えば、2 つの文字列変数のいずれかをエンコードまたはデコードして、それらが一致するかどうかを確認できます。
ところで、これが私の最初の回答です。少しでもお役に立てば幸いです ;-)
ダンプ結果から、それは明らかです。最初の変数は、内部構造に utf-8 エンコーディングで基地局を構成する 9 文字を格納します。2 番目の変数は、内部構造の 3 文字を表します。これらは同じバイト ストリームを持ち、バイト ストリーム ビューでは同じですが、文字ベースの比較では同じではありません。
デコード/エンコードを使用すると、問題を解決できます。