希望有人能指出我在哪里出错的方向:
我有一串(我相信的)是十六进制编码的 UCS2,但提供商无法告诉我它是 UCS2-LE 还是 UCS2-BE。
像这样:0627062E062A062806270631
它翻译为:اختبا
显然是阿拉伯语……但无论我是否尝试将其转换为十六进制,将其用作直接的 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);
它现在输出乱码。
现在我想出的一个想法是将有问题的字符串分成 4 个字符的部分(即每个十六进制代码),但即使尝试使用单个已知的 UCS2 十六进制值似乎也不起作用。
还尝试强制输出编码,也没有乐趣。
谢谢!