2010-12-20 17 views
5

इसे पसंद टेम्पलेट टूलकिट ठीक से एन्कोडिंग से निपटने नहीं है लगता है।खाका टूलकिट वर्ण एन्कोडिंग

मैं template->process एक फ़ाइल नाम (जहां टेम्पलेट प्राप्त करने के लिए) पास कर रहा हूं, एक हैश संदर्भ (सभी पैरामीटर युक्त), और एक स्केलर संदर्भ (आउटपुट कहां रखा जाए) तो मैं इसे वापस कर रहा हूं और बदले में इसे प्रदर्शित कर रहा हूं उपभोक्ता।

जब मैंने इसे उस में उमलॉट साथ एक स्ट्रिंग दे, एचटीएमएल उत्पादन हर पत्र (लेकिन पत्र की सही संख्या) के स्थान पर एक सफेद प्रश्न चिह्न के साथ एक काला हीरा भी शामिल है। कोई अन्य चरित्र ठीक हो जाता है।

मैं टेम्पलेट-> प्रक्रिया पर कॉल करने से पहले स्ट्रिंग को मुद्रित करने के लिए एक चेतावनी का उपयोग कर रहा हूं और इस बिंदु पर यह ठीक है, मैं इसे बता सकता हूं कि template->process के दौरान यह कहता है कि चीजें कचरे में बदल जाती हैं।

कोई भी विचार? मैं ENCODING => "utf8" के साथ-साथ binmode => ":utf8" उपयोग करने की कोशिश की है, लेकिन न तो कोई उत्पादन पर कोई प्रभाव।

यहां मेरे कोड को टेम्पलेट-> प्रक्रिया में कॉल करने के लिए केवल कुछ वसा छिद्रित किया गया है, ध्यान दें कि अगर मैं {binmode => 'utf8'} छोड़ देता हूं तो इसका कोई प्रभाव नहीं पड़ता है।

<put variables in hash referenced to by vars> 
<print out variables in has referenced to by $var> 
my $data; 
$template->process($self->filename, $vars, \$data, {binmode => ':utf8'}) || die "Template process failed: ", $template->error(); 
return $data; 

अपने जवाब के लिए हल अरे सब धन्यवाद, समस्या निकला है किके बाद टेम्पलेट प्रक्रिया अपनी बात किया था, हम तो यह तो हम भी outputting से पहले एक अस्थायी फ़ाइल के लिए स्ट्रिंग लिखा था फ़ाइल के लिए binmode स्थापित करने के लिए की जरूरत है, कोड अब लगता है कि:

<put variables in hash referenced to by vars> 
<print out variables in has referenced to by $var> 
my $data; 
binmode(STDOUT, ":utf8"); 
$template->process($self->filename, $vars, \$data, {binmode => ':utf8'}) || die "Template process failed: ", $template->error(); 
return $data; 

मैं आप सभी अपना समय :)

+0

यूटीएफ 8 के बजाय यूटीएफ -8 पास करने का प्रयास करके शायद असंबंधित। कभी कभी यह मायने रखती है, जैसे http://jeremy.zawodny.com/blog/archives/010546.html – Hugmeir

+2

UTF-8 पाठ घायल हो रही है या है ब्राउज़र सिर्फ सही एन्कोडिंग उठा नहीं है? –

+0

यदि यह बाद वाला था तो मैं ब्राउज़र को बता सकता हूं कि किस एन्कोडिंग का उपयोग करना है? एचटीएमएल टेम्पलेट समर्थक (जिस प्रणाली से हम आगे बढ़ रहे हैं) का उपयोग कर वर्ण सही तरीके से प्रदर्शित होते हैं। यह मुझे विश्वास दिलाता है कि यह टीटी था लेकिन मैं गलत हो सकता था। ट्रेन पर अब मुझे कल सुबह किसी भी सुझाव का प्रयास करना होगा। – cjh

उत्तर

6

काम करता है नीचे कोड। $data, विशेष रूप से स्ट्रिंग्स स्ट्रिंग पर्ल स्ट्रिंग्स होनी चाहिए, यानी ठीक से decode डी। introduction to encoding in the official documentation देखें।

use Template '2.21_02'; 

my $tt = Template->new({ 
    ENCODING  => 'utf8', 
    # other options … 
}); 

$tt->process(
    $template, $data, $output, {binmode => ':utf8'} 
) or die $tt->error . ' in ' . $template; 
+1

मुझे लगता है कि यह ठीक है कि आत्महत्या करने वाले ने कहा कि उन्होंने मूल प्रश्न में कोशिश की, नहीं? –

+0

सं।उन्होंने कहा कि यह काम नहीं किया है, मैंने जोर देकर कहा कि यह काम करता है। मैंने पहेली में एक लापता टुकड़े के बारे में भी लिखा था। – daxim

+0

स्वीकृत, भले ही मैंने लिखा था, यह भी मुझसे पूछे गए प्रश्न का उत्तर देता है। टेम्पलेट टूलकिट एन्कोडिंग जुर्माना संभाल रहा है। सबको शुक्रीया। – cjh

1

मेरे समाधान पी के लिए गया था के लिए धन्यवाद unt, और सभी गैर-लैटिन वर्ण en.po में [% loc('string') %] के माध्यम से रनटाइम पर शामिल होने के लिए जाते हैं और यह मेरे लिए ठीक काम करता है क्योंकि मेरे टेम्पलेट्स को वैसे भी स्थानांतरित किया जाना था।

+0

आपके उत्तर के लिए धन्यवाद हालांकि मेरे मामले में यह उपयोगकर्ता द्वारा प्रदत्त डेटा है और कई सारे टेम्पलेट्स हैं इसलिए ऐसा करना वास्तव में एक विकल्प नहीं है – cjh

+1

@ सुइसेडकी - फिर टेम्पलेट :: प्लगइन :: डीकोड का प्रयास करें और '| अपने प्रत्येक उपयोगकर्ता स्ट्रिंग के बाद डीकोड करें –

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