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

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

由于

有帮助吗?

解决方案

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

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

有关Perl,charsets和编码的更多信息

其他提示

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top