可以说我有这个代码:
use strict;
use LWP qw ( get );
my $content = get ( "http://www.msn.co.il" );
print STDERR $content;
错误日志显示类似 "\xd7\x9c\xd7\x94\xd7\x93\xd7\xa4\xd7\xa1\xd7\x94" 我猜它是 utf-16 的内容?
该网站的编码是
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1255">
那么为什么出现这些字符而不是 windows-1255 字符呢?
而且,另一个奇怪的事情是我有两台服务器:
第一个服务器返回 CP1255 字符,我可以简单地将其转换为 utf8,当前服务器给了我这些字符,我不能用它做任何事情......
apache/perl/module 中是否有任何配置文件弄乱了编码?强迫什么……?
我的网站在第二台服务器上的结果是 perl 文件和标题都是 utf8,所以当我编写不是英文字符的文本时,上面示例中的内容显示正常(即使它是奇怪的 utf 字符)但我自己的静态文本看起来像“×ס'××ר××:”
我测试的另一件事是......
通过 perl:
my $content = `curl "http://www.anglo-saxon.co.il"`;
我得到 utf8 编码。
通过 Bash:
curl "http://www.anglo-saxon.co.il"
在这里我得到CP1255(Windows-1255)编码......
此外,当我在 bash 中运行脚本时 - 它提供 CP1255,当通过网络运行时 - 然后它又是 utf8 ......
通过将内容从 utf8 更改为应有的内容,然后返回 utf8 来解决问题:
use Text::Iconv;
my $converter = Text::Iconv->new("utf8", "CP1255");
$content=$converter->convert($content);
my $converter = Text::Iconv->new("CP1255", "utf8");
$content=$converter->convert($content);