在 perl 脚本中/与 perl 脚本一起使用 utf8

tos*_*iba 5 windows perl encode decode utf-8

我在德语 Windows 7 下运行最新的 perl,我想在我的 perl 程序中的任何地方使用 utf8(对于脚本、文件内容、文件名、邮件文本等)。

一切正常,但在尝试处理文件名中包含特殊字符的文件时,我遇到了问题。即使system打电话也不能很好地工作。utf8 那么(如何)我可以告诉 perl在任何地方使用?

我尝试了一段时间encodedecode但很不清楚为什么它能起作用......而且我需要encode('cp850', TEXT)在命令提示符窗口中正确显示。

例子:

当我需要复制文件时,它仅在我使用时有效File::copy(encode("iso-8859-1", $filename), ...),并且当我想使用 pdf 文件内容时,成功的命令是system(encode('cp850', sprintf('pdftk.exe %s...', decode('utf8', $file))));

为什么会这样(特别是系统调用中的解码)并且有更简单的方法吗?也许有什么use open ':encoding...',但到目前为止我还没有运气。

JGN*_*GNI 1

首先将命令提示符的代码页设置为 65001

chcp 65001
Run Code Online (Sandbox Code Playgroud)

这将允许您在命令提示符中使用和显示 utf8 字符。文件名取决于所使用的文件系统。NTFS 使用 UTF-16LE 编码存储文件名。请参阅问题,了解如何在 Windows 上创建和访问具有 Unicode 文件名的文件。

System() 命令需要使用与命令提示符相同的代码页进行编码,因此在执行 a 之后,chcp 65001您可以将system()命令编码为 utf8