如何在Perl中将ASCII转换为utf8

时间:2020-08-05 17:24:46

标签: perl encoding

我想在perl中将ASCII转换为utf8。

示例

éµÂÂæ´ªæ->邵洪林

1 个答案:

答案 0 :(得分:0)

首先,这些字符都不是ASCII字符(保留空格->)。

似乎您使用UTF-8编码了文本,而第二次使用UTF-8编码了文本。您需要避免进行第二种编码,或者在执行第二种编码之前撤消第一种编码。 (下面的代码执行第二步。)

要将已使用字符编码编码的文本转换为Unicode代码点,请使用Encode的decode或类似代码。

use feature qw( say );
use open ":std", ":encoding(UTF-8)";   # Terminal provides/expects UTF-8

use Encode qw( decode );

my $utf8 = "\xE9\x82\xB5\x20\xE6\xB4\xAA\xE6\x9E\x97";

say sprintf("%vX", $utf8);
say $utf8;  # XXX STDOUT expect UCP because of C<< use open >>.

my $ucp = decode("UTF-8", $utf8);
say sprintf("%vX", $ucp);
say $ucp;

输出:

E9.82.B5.20.E6.B4.AA.E6.9E.97
邵 洪林
90B5.20.6D2A.6797
邵 洪林

简而言之,您想要解码输入并编码输出。在上面的示例中,decode用于解码输入,use open处理发送到STDOUT的内容的编码(除其他外)。