应使用什么字符串来指定Perl POD中的编码,“utf8”,“UTF-8”或“utf-8”?

时间:2013-08-07 16:48:24

标签: perl encoding utf-8 documentation

可以用UTF-8编写Perl文档。要做到这一点,你应该写在你的POD中:

=encoding NNN

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

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

2 个答案:

答案 0 :(得分:14)

=encoding UTF-8

According to IANA, charset names are case-insensitive,所以utf-8是相同的。

utf8 is Perl's lax variant of UTF-8.但是,为了安全起见,您希望对POD处理器严格要求。

答案 1 :(得分:3)

正如达西姆指出的那样,我被误导了。 =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>

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

  • 规范编码名称为utf8
  • 名称UTF-8utf8的别名,
  • 名称不区分大小写,因此utf-8相当于UTF-8

最佳做法是什么?我不确定。我不认为你使用官方IANA名称出错(根据daxim的回答),但是在官方的Perl文档之后你也不会出错。