在Ubuntu上使用Perl 5.26.1我在使用Dancer :: Logger :: Console时遇到了以下问题。我已经从Dancer2::Core::Role::Logger中取出了这个代码。
要运行此命令,您需要生成以下语言环境:
sudo locale-gen de_DE.UTF-8
sudo locale-gen ko_KR.UTF-8
此示例代码使用朝鲜语语言环境,并在没有错误消息的情况下失败。 $@
是空的。
$ LC_ALL=ko_KR.UTF-8 perl -MPOSIX -MEncode -E 'eval {
say Encode::decode("UTF-8", strftime("%b", localtime))
};
say $@;
'
Wide character at -e line 1.
当使用德语语言环境运行时,它会成功(但会抛出一个宽字符警告,我们可以忽略此测试)。
$ LC_ALL=de_DE.UTF-8 perl -MPOSIX -MEncode -E 'eval {
say Encode::decode("UTF-8", strftime("%b", localtime))
};
say $@;
'
Wide character in say at -e line 2.
M�r
%b
格式是缩写的月份为本地化的单词(请参阅http://strftime.net/)。
如果我们不Encode::decode("UTF-8", ...)
,它的工作原理,上面的版本与韩国产生3월
。
这里发生了什么?