在Perl中,如何将字节数组转换为Unicode字符串?

时间:2015-02-28 23:37:24

标签: arrays perl utf-8 bytearray

有谁知道怎么做?这甚至可能吗?

我读过有关解码和编码的内容,但由于我不是专家,所以我不知道它是否会有所帮助。

1 个答案:

答案 0 :(得分:8)

当然,这是可能的。如果你有字节数组

my @bytes = (0xce, 0xb1, 0xce, 0xb2, 0xce, 0xb3);

你需要先将它们组合成一串八位字节:

my $x = join '', map chr, @bytes;

然后,您可以使用utf8::decode将其转换为UTF-8 到位

utf8::decode($x)
    or die "Failed to decode UTF-8";

您也可以使用Encode::decode_utf8

#!/usr/bin/env perl

use 5.020; # why not?!
use strict;
use warnings;

use Encode qw( decode_utf8 );
use open qw(:std :utf8);

my @bytes = (0xce, 0xb1, 0xce, 0xb2, 0xce, 0xb3);
my $x = join '', map chr, @bytes;

say "Using Encode::decode_utf8";
say decode_utf8($x);

utf8::decode($x)
    or die "Failed to decode in place";

say "Using utf8::decode";
say $x;

输出:

C:\Temp> perl tt.pl  
Using Encode::decode_utf8                      
αβγ                                            
Using utf8::decode                             
αβγ

Encode允许您在许多字符编码之间进行转换。它的功能允许您指定encoding/decoding operations fail时发生的情况,而utf8::decode只限于显式检查成功/失败。