我想在perl中将ASCII转换为utf8。
示例
éµÂÂæ´ªæ->邵洪林
答案 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的内容的编码(除其他外)。