Perl Encode - 英国字符

时间:2010-06-15 15:26:04

标签: perl encode latin9

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

所以我正在尝试:编码功能,但根本没有运气。

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 �

现在拔头发:/

3 个答案:

答案 0 :(得分: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 is indeed the Euro symbol in Latin-9

答案 1 :(得分:1)

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

e.g。我试过这个,完全绕过它:

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";

输出:

 
Latin-9 Encoding: iso-8859-15  
Encoded UK: £  

答案 2 :(得分:0)

“使用utf8;”是的,因为Perl 5.8,只用于告诉Perl你的源文件是用UTF-8编码的。

您的源代码的编码是否与您告诉Perl的内容完全匹配?

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

:set fenc=utf8

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

set fileencodings=ucs-bom,utf-8,latin9