将utf7字符串转换为iso8859-1

时间:2013-10-24 09:13:58

标签: perl

如何将utf7字符串转换为iso-8859-1格式?我尝试了以下但是打印出错误的结果:

use Encode qw(encode decode);
$data ='t+AOQ-m+AOQ- on mit+AOQ- on';
$data = encode("iso-8859-1", decode("utf7", $data));
print $data; #result Tämä on mitä on

这会打印tΣmΣ on mitΣ on,但应打印Tämä on mitä on

1 个答案:

答案 0 :(得分:5)

use Encode qw(encode decode);
$data ='t+AOQ-m+AOQ- on mit+AOQ- on';
$data = encode("iso-latin-1", decode("utf7", $data));
printf "%v02X\n", $data;

给出

74.E4.6D.E4.20.6F.6E.20.6D.69.74.E4.20.6F.6E

的iso-latin-1编码
tämä on mitä on

如果您看到“tämäonmitäon”以外的其他内容,那是因为您用来查看它的工具将其视为iso-latin-1以外的其他内容。

您想要iso-latin-1,还是希望它在您的工具中正确显示?如果是后者,请使用正确的编码而不是iso-latin-1。

如果命令行工具chcp返回437(例如),则需要cp437。

use Encode qw(encode decode);
my $raw ='t+AOQ-m+AOQ- on mit+AOQ- on';
my $data = decode("utf7", $raw);
print encode("cp437", "$data\n");

或更好

use open ':std', ':encoding(cp437)';
use Encode qw(decode);
my $raw ='t+AOQ-m+AOQ- on mit+AOQ- on';
my $data = decode("utf7", $raw);
print "$data\n";