这是来自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 �
现在拔头发:/
答案 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 .
答案 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