【问题标题】:What content encoding does a Perl CGI script use by default?Perl CGI 脚本默认使用什么内容编码?
【发布时间】:2008-10-07 17:04:25
【问题描述】:

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

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

谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

    More on Perl, charsets and encodings

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

          • hmm,我忘了提到当应用程序构建页面时,它在 http 标头中将内容编码指定为 iso-8859-1。我最好更新问题...
          • 浏览器假定http头中的字符集是正确的,所以如果你想输出utf-8你也应该指定utf-8。
          猜你喜欢
          • 1970-01-01
          • 2011-08-02
          • 1970-01-01
          • 1970-01-01
          • 2011-02-23
          • 2010-11-16
          • 2012-03-10
          • 1970-01-01
          相关资源
          最近更新 更多