我们在库中遇到一个错误,该错误是由输入之一为Unicode引起的。
使用该库将use utf8;
添加到脚本中即可解决此问题。
但是,将use utf8;
添加到库本身(这样将修复使用该库的所有脚本)没有任何作用。
为什么?可以解决吗?
答案 0 :(得分:3)
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
传递给模块,并且模块因此而产生垃圾,则仍然需要修复该脚本。)