在
(在t和s之间有无效字符。)
Date::Holidays::DK
模块中,某些丹麦假日的名称是用Latin1编码编写的。例如,一月一号是“Nytårsdag”。为了获得适当的utf8编码字符串,我应该对下面的$x
执行什么操作?use Date::Holidays::DK;
my $x = is_dk_holiday(2011,1,1);
我尝试了在use Date::Holidays::DK
之前/之后使用各种组合的use utf8
和no utf8
,但似乎没有任何效果。我还尝试使用Encode的decode
,但没有成功。更具体地说,
use Date::Holidays::DK;
use Encode;
use Devel::Peek;
my $x = decode("iso-8859-1",
is_dk_holiday(2011,1,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之间有无效字符。)
is_utf8
并不表示某些内容需要被编码。事实上,Perl不能知道字符串是否需要被编码。如果能知道,它就可以自己完成这个任务。(我可以详细地反驳你的说法,但是这个框不适合解释任何东西。)至于替代方案,你应该在输入时对所有内容进行解码,在输出时对所有内容进行编码。如果你想处理已编码和未编码的字符串,你需要手动跟踪哪个是哪个。 - ikegami