8

可以用 UTF-8 编写 Perl 文档。为此,您应该在 POD 中写入:

=encoding NNN

但是你应该写NNN什么呢?不同的来源给出了不同的答案。

正确答案是什么?在 POD 中写入的正确字符串是什么?

4

2 回答 2

15
=encoding UTF-8

根据 IANA,字符集名称不区分大小写,所以utf-8也是一样的。

utf8是 Perl 的 UTF-8 的松散变体。但是,为了安全起见,您希望对您的 POD 处理器严格。

于 2013-08-07T17:01:33.680 回答
3

正如 daxim 指出的那样,我被误导了。=encoding=UTF-8=encoding=utf-8应用严格编码,并且=encoding=utf8是宽松编码:

$ cat enc-test.pod
=encoding ENCNAME

=head1 TEST '\344\273\245\376\202\200\200\200\200\200'

=cut

(这里\xxx表示值为xxx.的文字字节\344\273\245是有效的 UTF-8 序列,\376\202\200\200\200\200\200不是)

=encoding=utf-8

$ perl -pe 's/ENCNAME/utf-8/' enc-test.pod | pod2cpanhtml | grep /h1
>TEST &#39;&#20197;&#27492;&#65533;&#39;</a></h1>

=encoding=utf8

$ perl -pe 's/ENCNAME/utf8/' enc-test.pod | pod2cpanhtml | grep /h1
Code point 0x80000000 is not Unicode, no properties match it; ...
Code point 0x80000000 is not Unicode, no properties match it; ...
Code point 0x80000000 is not Unicode, no properties match it; ...
>TEST &#39;&#20197;&#2147483648;&#39;</a></h1>

它们都是等价的。参数 to应该是模块=encoding识别的名称。Encode::Supported当您深入研究该文档时,您会看到

  • 规范编码名称是utf8
  • 该名称UTF-8是 的别名utf8,并且
  • 名称不区分大小写,因此utf-8等价于UTF-8

最佳做法是什么?我不知道。我认为使用官方 IANA 名称不会出错(根据 daxim 的回答),但遵循官方 Perl 文档也不会出错。

于 2013-08-07T17:09:47.500 回答