誰かが私がこれで間違っている方向に私を向けることができることを願っています:
(私が信じている) 16 進エンコードされた UCS2 の文字列がありますが、プロバイダーはそれが UCS2-LE か UCS2-BE かを教えてくれません。
そのように: 0627062E062A062806270631
これは次のように翻訳されます。
アラビア語ではどうやら...しかし、それを16進数から変換しようとしても、それをまっすぐなUCS2(LEまたはBE)として使用しても、実際に太陽の下で考えることができる他のものとして使用しても、ネイティブに変換することはできません- perl UTF-8 を使用して、標準の UTF-8 (システムのネイティブ形式) として再エンコードできるようにします。
コード:
my $string = "0627062E062A062806270631";
my $decodedHex = hex($string);
#NEAREST
my $perlDecodedUTF8 = decode("UCS-2BE", $decodedHex);
my $utf8 = encode('UTF-8',$perlDecodedUTF8);
open(ARABICTEST,">ucs2test.txt");
print(ARABICTEST $perlDecodedUTF8);
print("Done!");
close(ARABICTEST);
現時点では意味不明な文字を出力します。
私が思いついたアイデアの 1 つは、問題の文字列を 4 文字のセクション (つまり、16 進コードごと) に分割することでしたが、これを個々の既知の UCS2 16 進値で試してもうまくいかないようです。
また、出力エンコーディングを強制しようとしましたが、そこにも喜びはありませんでした。
ありがとう!