2009-07-11 14 views
5

पर दिखाई देता है मैं यूटीएफ 8 कोडित टेक्स्ट पर एक्सएमएल :: आरएआई पर्ल मॉड्यूल का उपयोग करने की कोशिश कर रहा हूं और मुझे अभी भी त्रुटि है जो मैं वास्तव में समझ में नहीं आता ... यहां कोड है (यह कुछ भी उपयोगी करना चाहिए नहीं अभी तक):"अजीब जगहों के साथ स्ट्रिंग को डीकोड नहीं कर सकता" 0 अजीब जगह

use HTTP::Request; 
use LWP::UserAgent; 
use XML::RAI; 
use Encode; 

my $ua = LWP::UserAgent->new; 


sub readFromWeb{ 
    my $address = shift; 
    my $request = HTTP::Request->new(GET => $address); 
    my $response = $ua->request($request); 
    return unless $response->code == 200; 

    return decode("utf8", $response->content()); 
} 

sub readFromRSS{ 
    my $address=shift; 
    my $content = readFromWeb $address; 
    my $rai = XML::RAI->parse_string($content); 
      #this line "causes" the error 
} 


readFromRSS("http://aktualne.centrum.cz/export/rss-hp.phtml"); 
    #I am testing it on this particular RSS 

त्रुटि है:

Cannot decode string with wide characters at /usr/lib/perl5/5.8.8/i686-linux/Encode.pm line 166. 

मुझे लगता है कि अगर मेरी गलती या एक्सएमएल की गलती :: राय है एक सुराग नहीं है। मुझे नहीं लगता कि ये विस्तृत वर्ण कहां हो सकते हैं, अगर $ सामग्री पहले से utf8 से डीकोड की गई है ...

संपादित करें: किसी कारण से मैं अभी भी समझ में नहीं आता, "डीकोड" भाग को वास्तव में समस्या हल करने के लिए हटा रहा है।

उत्तर

9

समस्या डबल-डिकोडिंग है। XML::RAI::parse_string() स्पष्ट रूप से एक यूटीएफ -8 एन्कोडेड दस्तावेज़ की अपेक्षा करता है और डीकोडिंग स्वयं करता है। आप एक स्ट्रिंग कि पहले से ही डीकोड किया जाता है, इसे डीकोड दूसरी बार असफल हो जायेगी, निश्चित रूप से में पारित हैं:

#!/usr/bin/perl 
use strict; 
use warnings; 

use Encode qw(decode); 
use LWP::Simple qw(get); 

my $xml = get("http://aktualne.centrum.cz/export/rss-hp.phtml"); 

$xml = decode('UTF-8', $xml); 
$xml = decode('UTF-8', $xml); # dies: Cannot decode string with wide characters ... 

तो बस decode() चरण को छोड़कर आप ठीक हो जाओगे।

संबंधित मुद्दे