可以用 UTF-8 编写 Perl 文档。为此,您应该在 POD 中写入:
=encoding NNN
但是你应该写NNN
什么呢?不同的来源给出了不同的答案。
- perlpod说那应该是
=encoding utf8
- 这个stackoverflow答案指出它应该是
=encoding UTF-8
- 这个答案告诉我写
=encoding utf-8
正确答案是什么?在 POD 中写入的正确字符串是什么?
可以用 UTF-8 编写 Perl 文档。为此,您应该在 POD 中写入:
=encoding NNN
但是你应该写NNN
什么呢?不同的来源给出了不同的答案。
=encoding utf8
=encoding UTF-8
=encoding utf-8
正确答案是什么?在 POD 中写入的正确字符串是什么?
=encoding UTF-8
根据 IANA,字符集名称不区分大小写,所以utf-8
也是一样的。
utf8
是 Perl 的 UTF-8 的松散变体。但是,为了安全起见,您希望对您的 POD 处理器严格。
正如 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 '以此�'</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 '以�'</a></h1>
它们都是等价的。参数 to应该是模块=encoding
识别的名称。Encode::Supported
当您深入研究该文档时,您会看到
utf8
UTF-8
是 的别名utf8
,并且utf-8
等价于UTF-8
最佳做法是什么?我不知道。我认为使用官方 IANA 名称不会出错(根据 daxim 的回答),但遵循官方 Perl 文档也不会出错。