我正在修改用Perl编写的成熟的CGI应用程序,并且出现了内容编码的问题。浏览器报告内容是iso-8859-1编码,并且应用程序将iso-8859-1声明为HTTP标头中的字符集,但似乎实际上编码。 perldoc教程(Encode,Encoding,Open)中描述的各种编码技术都没有在代码中使用,所以我对文档的实际存在方式感到有些困惑编码。
如上所述,该应用程序非常成熟,可能早于许多当前的编码方法。有谁知道我应该寻找的任何遗留或弃用的技术?当开发人员没有提供方向时,Perl假设/默认为什么编码?
由于
答案 0 :(得分:8)
默认情况下,Perl将字符串作为字节序列处理,因此如果从文件中读取并将其打印到STDOUT,它将生成相同的字节序列。如果您的模板是Latin-1,那么您的输出也将是Latin-1。
如果在文本字符串上下文中使用字符串(例如uc
,lc
等),perl会假定使用Latin-1语义,除非字符串之前已被解码。
答案 1 :(得分:2)
Perl不会假设任何东西,但浏览器假设编码通常基于猜测。如果没有使用任何编码技术,则直接输出文档,就像它们被编写一样。
您可以在HTTP Content-Type标头中指定字符集。
答案 2 :(得分:1)
我看的第一个地方是服务器配置。如果您没有在程序中设置内容编码标题,那么您可能会接受服务器的猜测。
独立于服务器运行脚本以查看其实际输出。当服务器从CGI程序(不是nph)获取输出时,服务器会在将其发送给客户端之前修复它认为缺少的任何内容。
答案 3 :(得分:0)
如果浏览器将内容报告为iso-8859-1,那么你的perl脚本可能没有输出正确的标题来指定字符集吗?