为什么不“使用utf-8”?在Perl模块中使用时可以工作吗?

时间:2019-04-04 20:31:36

标签: perl utf-8

我们在库中遇到一个错误,该错误是由输入之一为Unicode引起的。

使用该库将use utf8;添加到脚本中即可解决此问题。

但是,将use utf8;添加到库本身(这样将修复使用该库的所有脚本)没有任何作用。

为什么?可以解决吗?

2 个答案:

答案 0 :(得分:3)

来自the documentation

  

use utf8 pragma告诉Perl解析器允许在当前词法范围内的程序文本中使用UTF-8。

换句话说,此编译指示仅适用于当前程序包。您需要将其放在其源代码可能包含Unicode字符的每个软件包中。如果您的输入来自其他地方,则需要确保对其进行了正确解码:编译指示对此无效。

PS:我知道您的意思是use utf8,而不是use utf-8(后者不是有效的编译指示)。

答案 1 :(得分:3)

use utf8;告诉Perl当前文件是使用UTF-8编码的。

您有一个使用UTF-8编码的脚本,因此必须在脚本中添加use utf8;。 (没有它,您可能会认为您有my $x = "é";,但您是在告诉Perl my $x = "é";。)

如果它是使用UTF-8编码的脚本,则将其添加到模块中没有任何意义。该指令必须添加到使用UTF-8编码的每个文件(脚本或模块)中。 (如果您将错误的$x传递给模块,并且模块因此而产生垃圾,则仍然需要修复该脚本。)