私はこのコードを持っているとしましょう:
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 の文字は表示されないのでしょうか?
そして、もう1つの奇妙なことは、2つのサーバーがあることです:
CP1255文字を返す最初のサーバーと私は単にそれをutf8に変換することができ、現在のサーバーは私にこれらの文字を与え、私はそれで何もできません...
エンコーディングを台無しにしている設定ファイルが apache/perl/module にありますか? 何かを強制する...?
2番目のサーバーにある私のWebサイトの結果は、perlファイルとヘッダーがすべてutf8であるため、英語の文字ではないテキストを書くと、上記の例のコンテンツは正常に表示されます(奇妙なutf文字ですが)しかし、私自身の静的テキストは「×ס'××ר××:」のように見えます
私がテストしたもう1つのことは...
perl 経由:
my $content = `curl "http://www.anglo-saxon.co.il"`;
utf8エンコーディングを取得します。
Bash 経由:
curl "http://www.anglo-saxon.co.il"
そしてここでCP1255(Windows-1255)エンコーディングを取得します...
また、スクリプトをbashで実行するとCP1255が返され、Web経由で実行すると再び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);