小编Chr*_*ris的帖子

使用Perl将数字十六进制格式的UCS2(未知LE或BE)转换为UTF-8

希望有人可以指出我在这方面出错的方向:

我有一串(我相信)是十六进制编码的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个字符的部分(即每个十六进制代码),但即使尝试使用单独的,已知的UC​​S2十六进制值也不会起作用.

还尝试强制输出编码,也没有欢乐.

谢谢!

perl hex ucs2 utf-8 character-encoding

3
推荐指数
1
解决办法
3564
查看次数

标签 统计

character-encoding ×1

hex ×1

perl ×1

ucs2 ×1

utf-8 ×1