希望有人可以指出我在这方面出错的方向:
我有一串(我相信)是十六进制编码的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);
Run Code Online (Sandbox Code Playgroud)
它目前输出乱码.
现在我想到的一个想法是将有问题的字符串拆分成4个字符的部分(即每个十六进制代码),但即使尝试使用单独的,已知的UCS2十六进制值也不会起作用.
还尝试强制输出编码,也没有欢乐.
谢谢!