Perl CGI脚本默认使用什么内容编码?

时间:2008-10-07 17:04:25

标签: perl iso-8859-1 content-encoding

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

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

由于

4 个答案:

答案 0 :(得分:8)

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

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

More on Perl, charsets and encodings

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

我看的第一个地方是服务器配置。如果您没有在程序中设置内容编码标题,那么您可能会接受服务器的猜测。

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

答案 3 :(得分:0)

如果浏览器将内容报告为iso-8859-1,那么你的perl脚本可能没有输出正确的标题来指定字符集吗?