Perl:latin1模块中的字符串文字 – 我想要utf8

前端之家收集整理的这篇文章主要介绍了Perl:latin1模块中的字符串文字 – 我想要utf8前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在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.您总是必须明确地或隐含地解码和编码.

猜你在找的Perl相关文章