希望有人能指出我在我與這個走錯了方向:我有一個字符串轉換UCS2(未知LE或BE)在數字十六進制格式爲UTF-8使用Perl
(什麼我相信)是十六進制編碼的UCS2,但提供商不能告訴我它是UCS2-LE還是UCS2-BE。
像這樣:0627062E062A062806270631
它翻譯成這樣:اختبا
在阿拉伯語中顯然......但是,沒有也罷,我嘗試轉換出來十六進制的,用它作爲直UCS2(LE或BE )或者其他我可以想到的任何其他東西,我不能將它變成native-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十六進制值嘗試此操作似乎也不起作用。
也嘗試強制輸出編碼,也沒有喜悅。
謝謝!
你試過[Unicode :: String](http://search.cpan.org/~gaas/Unicode-String-2.09/String.pm)嗎? – fnokke
@fnokke:不! Unicode :: String是一個過時的模塊,旨在爲古代版本的Perl提供Unicode支持,而這些版本沒有內置。沒有人應該編寫使用它的新代碼。 – cjm
@cjm:很高興知道!謝謝 – fnokke