在Date :: Holidays :: DK模块中,某些丹麦假期的名称是用Latin1编码编写的.例如,1月1日是’Nytårsdag’.为了获得正确的utf8编码字符串,我应该如何处理$x以下?
use Date::Holidays::DK; my $x = is_dk_holiday(2011,1,1);
我在使用Date :: Holidays :: DK之前/之后尝试了使用utf8和no utf8的各种组合,但它似乎没有任何效果.我也试图使用Encode的解码,没有运气.进一步来说,
use Date::Holidays::DK; use Encode; use Devel::Peek; my $x = decode("iso-8859-1",is_dk_holiday(2011,1) ); Dump($x); print "January 1st is '$x'\n";
给出输出
SV = PV(0x15eabe8) at 0x1492a10 REFCNT = 1 FLAGS = (PADMY,POK,pPOK,UTF8) PV = 0x1593710 "Nyt\303\245rsdag"\0 [UTF8 "Nyt\x{e5}rsdag"] CUR = 10 LEN = 16 January 1st is 'Nyt sdag'
(t和s之间的字符无效).
解决方法
use utf8 and no utf8 before/after use Date::Holidays::DK,but it does not seem to have any effect.
正确. utf8 pragma仅表示程序的源代码是用UTF-8编写的.
I also tried to use Encode’s decode,with no luck.
你没有正确地理解这一点,你实际上是做对了.您现在拥有一串Perl字符并可以对其进行操作.
with an invalid character between t and s
你也解释这个错误,它实际上是å字符.
您想输出UTF-8,因此您缺少编码步骤.
my $octets = encode 'UTF-8',$x; print $octets;
有关编码主题的介绍,请阅读http://p3rl.org/UNI.您总是必须明确地或隐含地解码和编码.