1

如何将 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

4

1 回答 1

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ä on mitä 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";
于 2013-10-24T11:23:28.030 回答