3

我正在修改一个用 Perl 编写的成熟 CGI 应用程序,并且出现了内容编码的问题。浏览器报告内容是 iso-8859-1 编码,并且应用程序将 iso-8859-1 声明为 HTTP 标头中的字符集,但似乎从未真正进行编码。perldoc 教程( EncodeEncodingOpen )中描述的各种编码技术都没有在代码中使用,所以我对文档的实际编码方式有点困惑。

如前所述,该应用程序非常成熟,并且可能早于许多当前的编码方法。有谁知道我应该寻找的任何遗留或弃用的技术?当开发人员没有提供方向时,Perl 假设/默认使用什么编码?

谢谢

4

4 回答 4

8

默认情况下,Perl 将字符串作为字节序列处理,因此如果您从文件中读取并将其打印到 STDOUT,它将产生相同的字节序列。如果您的模板是 Latin-1,那么您的输出也将是 Latin-1。

如果您在文本字符串上下文中使用字符串(例如 withuclc),perl 假定为 Latin-1 语义,除非该字符串之前已被解码。

更多关于 Perl、字符集和编码

于 2008-10-07T17:21:28.940 回答
2

Perl 不会假设任何东西,但浏览器假设编码通常基于猜测。如果不使用任何编码技术,文档将直接输出,就像它们被写入一样。

您可以在 HTTP Content-Type 标头中指定字符集。

于 2008-10-07T17:08:47.657 回答
1

我首先要看的是服务器配置。如果您没有在程序中设置内容编码标头,您可能会得到服务器的猜测。

与服务器分开运行脚本以查看其实际输出。当服务器从 CGI 程序(不是 nph)获得输出时,服务器会在将其发送给客户端之前修复它认为缺少的任何内容的标头。

于 2009-03-26T09:28:38.157 回答
0

如果浏览器将内容报告为 iso-8859-1,也许您的 perl 脚本没有输出正确的标题来指定字符集?

于 2008-10-07T17:06:27.583 回答