1

这是This Question的第 2 部分问题。

所以我正在尝试 :encode 功能,但完全没有运气。

use Encode;
use utf8;

# Should print: iso-8859-15
print "Latin-9 Encoding: ".find_encoding("latin9")->name."\n"; 

my $encUK = encode("iso-8859-15", "UK €");
print "Encoded UK: ".$encUK."\n";

结果:

Encoded UK: UK €

结果不应该被编码吗?我在这里做错了什么?

编辑:

添加了建议:

use utf8;

现在我明白了:

Encoded UK: UK �

现在拔头发:/

4

3 回答 3

4

不要拉你的头发。你做对了一切,已经完成并且已经得到了预期的数据;输出让您感到困惑,因为您可能从一个未设置为 Latin-9 而是设置为不同编码(可能是 UTF-8)的终端查看它。

> perl -e'use utf8; use Encode; print encode "Latin-9", "Euro €"'
Euro �

> perl -e'use utf8; use Encode; print encode "Latin-9", "Euro €"' | hex
0000  45 75 72 6f 20 a4                                 Euro .

Codepoint A4 确实是 Latin-9 中的欧元符号

于 2010-06-15T19:54:49.430 回答
1

我认为您可能没有在脚本中正确编码字符。你的编辑认为它的编码是什么?

例如,我刚刚尝试了这个,以完全规避它:

use Encode;

# Should print: iso-8859-15
print "Latin-9 Encoding: ".find_encoding("latin9")->name."\n";

my $encUK = encode("iso-8859-15", "\xA3");
print "Encoded UK: ", $encUK, "\n";

输出:

 
拉丁语 9 编码:iso-8859-15  
编码英国:£  
于 2010-06-15T17:30:05.043 回答
0

“使用 utf8;” 是,从 Perl 5.8 开始,只用来告诉 Perl 你的源文件是用 UTF-8 编码的。

那么你的源代码的编码真的和你告诉 Perl 的一致吗?

使用 'vim' 必须使用此选项以 UTF-8 写入文件:

:set fenc=utf8

要在加载文件时返回 UTF-8,必须在 .vimrc 中定义文件编码:

set fileencodings=ucs-bom,utf-8,latin9
于 2010-06-17T16:44:44.380 回答