내가이 코드가 있다고 가정하자 :왜 Perl의 LWP가 원본 웹 사이트와 다른 인코딩을 제공합니까?
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" 같은 표시를하는 나는 그것을 ~~16이라고 추측하고 있나?
웹 사이트의 인코딩은
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1255">
가 왜 이러한 문자는 Windows-1255의 문자를 표시하지 함께?
첫 번째 서버 반환 CP1255의 문자와 나는 단순히 UTF8, 로 변환 할 수 있으며 현재 서버 나에게 이러한 문자를주고 내가 할 수 없습니다
그리고, 또 다른 이상한 것은 내가 두 서버를 가지고있다 그것으로 무엇이든 ...
인코딩을 엉망으로 만드는 apache/perl/module의 구성 파일이 있습니까? 강제로 ...?
두 번째 서버에서 내 웹 사이트에있는 결과는 perl 파일과 헤더가 모두 utf8이므로 영어 문자가 아닌 텍스트를 작성하면 위 예제의 내용이 ok로 표시됩니다. 그것은 이상한 UTF의 문자를입니다)하지만 내 자신의 정적 텍스트는 "×× ¡ '××× ¨ ×× :"같이하는
내가이 시험을 한 가지 더 ... 펄을 통해
:
my $content = `curl "http://www.anglo-saxon.co.il"`;
utf8 인코딩이 있습니다.
배쉬를 통해: 내가 bash는 스크립트를 실행할 때
또한, 이
curl "http://www.anglo-saxon.co.il"
여기에 내가 얻을 CP1255 (윈도우 1255) 인코딩 ... -이 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);
"넓은 문자로 문자열을 디코딩 할 수 없습니다." –
정확히 답이 아니지만 귀하의 조언을 받아 들였습니다. Text :: Iconv 사용 ; \t my $ converter = Text :: Iconv-> new ("utf8", "CP1255"); \t $ content = $ converter-> convert ($ content); \t \t my $ converter = Text :: Iconv-> new ("CP1255", "utf8"); \t $ content = $ converter-> convert ($ content); 문제가 해결되었습니다 .... 예! –
"넓은 문자가 포함 된 문자열을 디코딩 할 수 없습니다."라는 오류는 문자열이 이미 디코딩되었음을 나타냅니다. Perl의 내부 인코딩이 UTF-8이기 때문에'Text :: Iconv'의 UTF-8-> CP1255-> UTF-8 변환 만 사용됩니다. 원래'$ content'는 (디코드에서 얻은 에러 메시지에 따라) 문자열이지만'byte' 문자열을'convert'에 전달해야합니다. 원하는 경우'encode ('UTF-8', $ content)'를 사용하여 UTF-8 바이트 문자열을 얻을 수 있습니다. –