可以说我有此代码:

use strict;
use LWP qw ( get );

my $content = get ( "http://www.msn.co.il" );

print STDERR $content;

错误日志显示了类似“ xd7 x9c xd7 x94 xd7 x93 xd7 xd7 xd7 xd7 xd7 xd7 xa1 xd7 x94”之类的内容。

网站的编码与

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1255">

那么,为什么这些角色出现,而不是Windows-1255字符呢?

而且,另一个奇怪的事情是我有两个服务器:

返回CP1255字符的第一台服务器,我可以简单地将其转换为UTF8,当前服务器给我这些字符,我对此无能为力...

Apache/Perl/模块中是否有任何配置文件弄乱编码?强迫一些...?

我在第二台服务器上的网站上的结果是,perl文件和标题都是UTF8,因此当我编写不是英语字符的文本时,上面示例中的内容也显示好(即使它是奇怪的utf chars )但是我自己的静态文本看起来像“××”

我测试的另一件事是...

通过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);
有帮助吗?

解决方案

带有您给出的十六进制值的字符串似乎是UTF-8编码。您之所以得到这个,是因为Perl“喜欢”处理字符串时使用UTF-8。这 LWP::Simple->get() 方法会自动解码服务器中的内容,其中包括取消任何内容编码以及转换为UTF-8。

您可以深入研究内部内容,并获得更改字符编码的版本(请参阅 http ::消息的解码, ,由 http ::响应的decoded_content, ,你可以从中得到 LWP :: Useragent的获取)。但是,重新编码所需编码中的数据可能会更容易

use Encode; 
...; 
$cp1255_bytes = encode('CP1255', decode('UTF_8', $utf8_bytes));

您看到的混合可读/垃圾字符是由于在同一流中混合多个,不兼容的编码。该流可能标记为UTF-8,但您将CP1255编码字符放入其中。您要么需要将流标记为CP1255,并仅将CP1255编码的数据标记为其中,要么将其标记为UTF-8,然后仅将UTF-8编码的数据标记为其中。提醒自己,字节不是字符,而是在适当之间进行转换。

其他提示

只是为了确保,尝试从 itemupdated 事件中获取值。也许是值不可用的原因是因为它们尚不存在。

http://www.msn.co.il 位于UTF-8中,并正确指示。字符串“ xd7 x9c xd7 x94 xd7 x93 xd7 xd7 xa4 xd7 xd7 xa1 xd7 x94”也是适当的utf-8(ללדפסדפסדפס)。我看不到问题。

我认为您的第二个问题是由于您混合不同的编码(UTF-8和Windows-1252)。你可能想要 编码/解码 您的琴弦正确。

首先,请注意您应该导入 getLWP ::简单. 。其次,一切都很好:

#!/usr/bin/perl
use strict; use warnings;
use LWP::Simple qw ( getstore );
getstore 'http://www.msn.co.il', 'test.html';

向我表明问题是您要发送输出的文件手机的编码。

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